Wie verwende ich die SQL Select-Anweisung mit der IF EXISTS-Unterabfrage?


76

Wie wähle ich einen booleschen Wert aus einer Unterabfrage mit der IF EXISTS-Anweisung (SQL Server) aus?

Es sollte so etwas sein wie:

SELECT 
  TABEL1.Id, 
  NewFiled = (IF EXISTS(SELECT Id FROM TABLE2 WHERE TABLE2.ID = TABEL1.ID) 
                 SELECT 'TRUE' 
              ELSE 
                 SELECT 'FALSE') 
FROM TABEL1

Antworten:


128

Verwendung 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

Wenn TABLE2.IDes sich um einen eindeutigen oder einen Primärschlüssel handelt, können Sie auch Folgendes verwenden:

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

18

Sie können auch ISNULL und eine select-Anweisung verwenden, um dieses Ergebnis zu erhalten

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

2
Ich habe gerade bemerkt, dass Sie gesagt haben, Sie wollten einen Bool-Wert. Es ist möglicherweise besser, 1/0 als True / False
Purplegoldfish

8
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 für die Kombination INTERSECT, UNIONund EXCEPTin einer Abfrage!
Ypercubeᵀᴹ

Minus 1 für das Gleiche - Angeben mit unnötiger Komplexität, die viel schwieriger zu lesen und zu warten wäre.
Anon_unique

@Anon_unique lol für mich ist dieser Code extrem einfach, vielleicht weil ich denke, dass er setbasiert ist.
Tag, wenn der

4

Verwenden Sie eine CASEAnweisung und machen Sie es so:

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.