2011-10-18 282 views

回答

83

使用CASE

SELECT 
    TABEL1.Id, 
    CASE WHEN EXISTS (SELECT Id FROM TABLE2 WHERE TABLE2.ID = TABLE1.ID) 
     THEN 'TRUE' 
     ELSE 'FALSE' 
    END AS NewFiled 
FROM TABLE1 

如果TABLE2.ID是唯一的或者一個主鍵,你也可以使用這樣的:

SELECT 
    TABEL1.Id, 
    CASE WHEN TABLE2.ID IS NOT NULL 
     THEN 'TRUE' 
     ELSE 'FALSE' 
    END AS NewFiled 
FROM TABLE1 
    LEFT JOIN Table2 
    ON TABLE2.ID = TABLE1.ID 
14

您也可以使用ISNULL和SELECT語句來得到這樣的結果

SELECT 
Table1.ID, 
ISNULL((SELECT 'TRUE' FROM TABLE2 WHERE TABLE2.ID = TABEL1.ID),'FALSE') AS columName, 
etc 
FROM TABLE1 
+2

你說你想布爾值,我只注意到,在一個查詢中選擇1/0而不是真/假 – Purplegoldfish

3

使用CASE聲明,像這樣做:

SELECT 
    T1.Id [Id] 
    ,CASE WHEN T2.Id IS NOT NULL THEN 'TRUE' ELSE 'FALSE' END [Has Foreign Key in T2] 
FROM 
    TABLE1 [T1] 
    LEFT OUTER JOIN 
     TABLE2 [T2] 
     ON 
     T2.Id = T1.Id 
7
SELECT Id, 'TRUE' AS NewFiled FROM TABEL1 
INTERSECT 
SELECT Id, 'TRUE' AS NewFiled FROM TABEL2 
UNION 
SELECT Id, 'FALSE' AS NewFiled FROM TABEL1 
EXCEPT 
SELECT Id, 'FALSE' AS NewFiled FROM TABEL2; 
+4

+1可能更好,用於組合'INTERSECT','UNION'和'EXCEPT'! –