SQL Server - 测试表A中的表A是否在表中

时间:2016-04-16 06:58:24

标签: sql-server stored-procedures boolean

我创建了两个表变量(每个变量有一列):

Declare @CoursePrereq TABLE (Prereq char(6))
Declare @TakenCourses TABLE (Taken char(6))

基本上,我想测试是否所有必备课程都存储在@TakenCourses表的take列中。如果是,那意味着已经采取了先决条件,并且我希望返回1(对于true)。显然,如果来自@CoursePrereq的所有值都不在@TakenCourses中,我想要0。

有没有办法测试Taken Column中的这些Prereq Column值是否为ALL?我已经尝试了一些东西(与前1个循环,if语句存在)并且我被卡住了。我可以得到一些帮助吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以使用NOT EXISTSPrereq列中查找缺失的Taken值。然后使用CASE表达式根据结果集的计数输出10

<强>查询

SELECT CASE WHEN COUNT(*) > 0 THEN 0 ELSE 1 END AS [Status]
FROM @CoursePrereq t
WHERE NOT EXISTS (
    SELECT 1 FROM @TakenCourses
    WHERE t.Prereq = Taken
);

SQL Fiddle Demo

答案 1 :(得分:1)

尝试使用exists:

    Declare @CoursePrereq TABLE (Prereq char(6))
    Declare @TakenCourses TABLE (Taken char(6))

    insert into @CoursePrereq values ('1'),('2'),('3')
    insert into @TakenCourses values ('1'),('2'),('3'),('4')


    select case when count(*) > 1 then 1 else 0 end as 'MATCHING' from @CoursePrereq 
    where exists  
   (select * from @TakenCourses where Prereq = Taken)

EXAMPLE