2011-10-18 9 views

Respuesta

83

Uso 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 

Si TABLE2.ID es único o una clave principal, también se podría utilizar esto:

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

También puede utilizar ISNULL y una instrucción de selección para obtener este resultado

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

simplemente me di cuenta de que dijo que quería valor bool, puede ser mejor seleccionar 1/0 en lugar de Verdadero/Falso – Purplegoldfish

3

Usar una declaración CASE y hacerlo de esta manera:

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 para combinar 'INTERSECT',' UNION' y 'EXCEPT' en una consulta. –

Cuestiones relacionadas