2011-10-18 56 views

Trả lời

83

Sử dụng 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 

Nếu TABLE2.ID là duy nhất hoặc một Primary Key, bạn cũng có thể sử dụng này:

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

Bạn cũng có thể sử dụng ISNULL và một tuyên bố chọn để có được kết quả này

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

Tôi chỉ nhận thấy bạn nói bạn muốn giá trị bool, có thể tốt hơn nếu chọn 1/0 thay vì True/False – Purplegoldfish

3

Sử dụng một tuyên bố CASE và làm điều đó như thế này:

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 để kết hợp 'INTERSECT',' UNION' và 'EXCEPT' trong một truy vấn! –

Các vấn đề liên quan