SqlServer 查询指定用户中共有的课程
2018-08-10 17:03
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
课程表:SELECT * FROM @COURSE_INFO
用户课程配置表:SELECT * FROM @USER_COURSE_CONFIG
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
和博主交个朋友吧