博主喝口茶,一毛也是爱

收缩

SqlServer 查询指定用户中共有的课程

2897 人阅读
分类:

使用PARTITION By分组来完成查询指定用户中共用的课程信息

模拟数据

--用户信息
DECLARE @USER_INFO TABLE
(
	[USER_ID] INT,
	[USER_NAME] NVARCHAR(20)
)
--课程表
DECLARE @COURSE_INFO TABLE
(
	COURSE_ID INT,
	COURSE_NAME NVARCHAR(20)
)
--用户课件配置表
DECLARE @USER_COURSE_CONFIG TABLE
(
	CONFIG_ID INT,
	[USER_ID] INT,
	COURSE_ID INT
)

INSERT INTO @USER_INFO([USER_ID],[USER_NAME]) 
	VALUES(1000,'mike'),(1001,'tom'),(1002,'andy'),(1003,'lucy')

INSERT INTO @COURSE_INFO(COURSE_ID,COURSE_NAME)
	VALUES(1000,'语文'),(1001,'数学'),(1002,'英语'),(1003,'物理')
		,(1004,'化学'),(1005,'地理'),(1006,'政治')

INSERT INTO @USER_COURSE_CONFIG(CONFIG_ID,[USER_ID],COURSE_ID)
	VALUES(1000,1000,1000),(1001,1000,1001),(1002,1000,1002),
		(1003,1001,1002),(1004,1001,1003),
		(1005,1002,1002),(1006,1002,1003),(1007,1002,1004),(1008,1002,1006),
		(1009,1003,1001),(1010,1003,1002),(1011,1003,1003),(1012,1003,1004),(1013,1003,1005)

模拟数据展示

用户表:SELECT * FROM @USER_INFO

userinfo.png

课程表:SELECT * FROM @COURSE_INFO

courseinfo.png

用户课程配置表:SELECT * FROM @USER_COURSE_CONFIG

userCourseConfig.png

1:查询指定用户中共有的课程

ps: 传入两个参数:

    1. 用户集合(eg:1002,1003)

    2. 用户个数(第一个参数的用户总个数,这里为:2)

SELECT A.COURSE_ID,A.COURSE_NAME FROM(
	--PARTITION By进行分组处理
	SELECT ROW_NUMBER() Over(PARTITION By UCC.COURSE_ID order by UCC.COURSE_ID Desc) RN ,
			UI.[USER_ID], UI.[USER_NAME],CI.COURSE_ID,CI.COURSE_NAME FROM @USER_INFO UI
	LEFT JOIN @USER_COURSE_CONFIG UCC ON UI.[USER_ID] = UCC.[USER_ID]
	LEFT JOIN @COURSE_INFO CI ON UCC.COURSE_ID = CI.COURSE_ID
	WHERE UI.[USER_ID] IN(1002,1003)
)A WHERE A.RN = 2

2:查询指定课程中共有的用户

ps: 传入两个参数:

    1. 课程集合(eg:1001,1002)

    2. 课程个数(第一个参数的课程总个数,这里为:2)

SELECT A.[USER_ID],A.[USER_NAME] FROM(
	--PARTITION By进行分组处理
	SELECT ROW_NUMBER() Over(PARTITION By UI.[USER_ID] order by UI.[USER_ID] Desc) RN ,
			UI.[USER_ID], UI.[USER_NAME],CI.COURSE_ID,CI.COURSE_NAME FROM @USER_INFO UI
	LEFT JOIN @USER_COURSE_CONFIG UCC ON UI.[USER_ID] = UCC.[USER_ID]
	LEFT JOIN @COURSE_INFO CI ON UCC.COURSE_ID = CI.COURSE_ID
	WHERE CI.[COURSE_ID] IN(1001,1002)
)A WHERE A.RN = 2



和博主交个朋友吧
    发布篇幅
    • 文章总数:0
    • 原创:0
    • 转载:0
    • 译文:0
    文章分类
      文章存档
      阅读排行