2010-09-03 27 views
0

我要比较一个表中的行,是不是在另一个表TSQL/SQL 2005/2008返回行从一个表,是不是在行吟诗人表

表A

ID 
1 
2 
3 
4 
NULL 

表B

ID 
1 
4 

当与表B,下面的O/p比较表A(NULL可以忽略)

ID STATUS 

1 FOUND 
2 NOT FOUND 
3 NOT FOUND 
4 FOUND 

我试着用

SELECT 
     case T.ID when isnull(T.ID,0)=0 then 'NOT FOUND' 
     case T.ID when isnull(T.ID,0)<>0 then 'FOUND' 
    end,T.ID 
    FROM 
      TableA T 
       LEFT JOIN 
      TableB N 
    ON T.ID=N.ID 

及其与不正确的语法附近“=”结束了,而且我不知道查询是否是正确的。

+0

它是'CASE当b1然后v1当b2然后v2 END' – Hogan 2010-09-03 09:22:07

回答

3

试试这个:

SELECT a.ID, 
    CASE WHEN b.ID IS NULL THEN 'NOT FOUND' ELSE 'FOUND' END AS Status 
FROM TableA a 
    LEFT JOIN TableB b ON a.ID = b.ID 

注意在CASE语句的结构上的差异 - 这是你的问题。

-1
SELECT 
T.ID 
FROM TableA T WHERE NOT EXISTS (SELECT X.ID FROM TableB X WHERE X.ID = T.ID) 

如果你想在“发现”或“未找到”答案去什么AdaTheDev发布

1

要生成的结果如图所示的问题:

SELECT ID, 
     CASE WHEN EXISTS (SELECT * FROM TableB WHERE ID = TableA.ID) 
      THEN 'FOUND' 
      ELSE 'NOT FOUND' 
     END AS STATUS 
    FROM TableA 

但如果你是只对缺失的记录感兴趣:

SELECT ID 
    FROM TableA 
WHERE NOT EXISTS (SELECT * FROM TableB WHERE ID = TableA.ID) 
相关问题