如何检查具有相同行值的两个表甚至行不匹配?

时间:2015-03-31 14:42:27

标签: sql sql-server-2008

我有两个表考虑tbl1和tbl2

   tbl1 

   Site
   ---------
   101 - Hold
   102 - test

   tbl2

   Site
   ---------
   101 - Hold
   104 - wel
   102 - test

我想检查tbl1中是否存在tbl2数据。如果是,则select语句必须返回“Yes”,否则返回“No”...

EXample
If tbl2 is not having "102-test" then also i have to return 'No'

我怎样才能做到这一点。

3 个答案:

答案 0 :(得分:0)

您可以通过查找不匹配并使用以下信息来执行此操作:

select (case when count(*) = 0 then 'Yes' else 'No' end)
from tbl2 t2
where not exists (select 1 from tbl1 where t1.site = t2.site);

count(*)保证只返回一行,包含yesno

答案 1 :(得分:0)

SELECT 
 CASE EXISTS( SELECT Id FROM tbl2 WHERE Id IN (SELECT Id FROM tbl1))
      THEN 'Yes'
      ELSE 'No'
 END    

答案 2 :(得分:0)

检查tbl2中是否存在tbl1数据,并在site存在Yes时返回No值为tbl2tbl1的{​​{1}} {1}}或不。{/ p>

无需使用任何汇总,并且您拥有所有tbl1网站的信息 - 这是您想要达到的目标(根据您的问题)。

SELECT 
    a.site, CASE WHEN b.site IS NOT NULL THEN 'Yes' ELSE 'No END AS value_exists
FROM 
    tbl1 a
    LEFT JOIN tbl2 b ON
        a.site = b.site

如果您在tbl1中有重复值,则可能需要考虑添加DISTINCTGROUP BY子句。