2011-10-18 10 views

Odpowiedz

83

Przymież 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 

Jeśli TABLE2.ID jest unikatowy lub klucz podstawowy, można również użyć tego:

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

Można również użyć ISNULL i SELECT, aby uzyskać ten wynik

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

Właśnie zauważyłem, mówiłeś, że chciał wartość bool, może być lepiej wybrać 1/0 zamiast True/False – Purplegoldfish

3

Użyj CASE rachunek i zrobić to tak:

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 dla połączenia 'INTERSECT',' UNION' i 'EXCEPT' w jednym zapytaniu! –

Powiązane problemy