SELECT u.VIDEO_ID FROM T_USER_LEARNING_RECORD AS u , dbo.T_VIDEO AS v WHERE u.VIDEO_ID = v.VIDEO_ID AND u.LEARNING_TIME >= v.TIME_LENGTH AND u.USER_ID = @user_id SELECT VIDEO_ID FROM dbo.T_VIDEO WHERE COURSE_ID=@course_id
上面两个sql语句都是找VIDEO_ID的,怎么在数据库中写一个函数判断一个查找到的集合是不是在另一个查找的集合里面,怎么去实现?函数两个参数@user_id、 @course_id
使用join 应该是可以的
if exists(select a.VIDEO_ID as VIDEO_ID_a ,b.VIDEO_ID as VIDEO_ID_b from
(SELECT u.VIDEO_ID FROM T_USER_LEARNING_RECORD AS u , dbo.T_VIDEO AS v WHERE u.VIDEO_ID = v.VIDEO_ID AND u.LEARNING_TIME >= v.TIME_LENGTH AND u.USER_ID = @user_id )
a
left join ( SELECT VIDEO_ID FROM dbo.T_VIDEO WHERE COURSE_ID=@course_id)
b on a.VIDEO_ID = b.VIDEO_ID
where b.VIDEO_ID is null)
print 'a 里 有的 b 里面没有'
数据全部查找出来,进行比对是否可以解决?
--比较A,B是否相等
if (select checksum_agg(binary_checksum(*)) from A) = (select checksum_agg(binary_checksum(*)) from B) print '相等 ' else print '不相等 '
不知道在多大的数据量下,不清楚你的具体需求,你是希望A 集合是否完整的存在与B集合中,还是找出A与B的交集呢?
个人不同意 @ Tom.汤 的做法,如果数据量大性能有问题
希望A 集合是否完整的存在于B集合中
A集合 SELECT VIDEO_ID FROM dbo.T_VIDEO WHERE COURSE_ID=@course_id
B集合 SELECT u.VIDEO_ID
FROM T_USER_LEARNING_RECORD AS u ,
dbo.T_VIDEO AS v
WHERE u.VIDEO_ID = v.VIDEO_ID
AND u.LEARNING_TIME >= v.TIME_LENGTH
AND u.USER_ID = @user_id