Ich versuche gerade jetzt die folgende Abfrage aus:ALL vs ANY Auswertung in SQL Server
SELECT DISTINCT code,
CASE
WHEN id = ANY (SELECT DISTINCT u.id
FROM unit u
LEFT JOIN unit_const uc
ON u.id = uc.hid
WHERE u.property = 502
AND type = 'Acq') THEN 1
ELSE 0
END AS Case_Eval,
(SELECT DISTINCT u.id
FROM unit u
LEFT JOIN unit_const uc
ON u.id = uc.hid
WHERE u.property = 502
AND type = 'Acq') AS Evaluation
FROM unit
WHERE property = 502
, die richtig unter Resultat ergibt:
+---------------------------------------+
| Code Case_Eval Evaluation |
+---------------------------------------+
| TP2_U1 0 NULL |
| TP2_U2 0 NULL |
| TP2_U3 0 NULL |
| TP2_U4 0 NULL |
+---------------------------------------+
Aber wenn ich wechsle ANY
-ALL
dann wird die CASE
Anweisung ausgewertet 1.
+---------------------------------------+
| Code Case_Eval Evaluation |
+---------------------------------------+
| TP2_U1 1 NULL |
| TP2_U2 1 NULL |
| TP2_U3 1 NULL |
| TP2_U4 1 NULL |
+---------------------------------------+
Aber wie y Sie können die SELECT-Anweisung sehen, die immer den zu vergleichenden Wert in CASE
NULL
zurückgibt.
Wie kann die CASE
-Anweisung dies als wahr bewerten? Die Einheit ID
ist nicht NULL
(sie sind 601, 602, 603 und 604 für die 4 Einheiten), also wie im Vergleich zu ALL(NULL)
Ergebnisse in wahr ist?
Gibt es etwas inkorrekt in meinem Verständnis?
Gemäß ALL documentation wertet es einen Skalarwert zu einer Liste von Werten aus.
Und es gibt true zurück, wenn.
"TRUE zurück, wenn der angegebenen Vergleich für alle Paare TRUE (scalar_expression, x), wenn x ein Wert in dem Einzelspaltensatz ist, andernfalls FALSE zurück "
Wie kann Paar (601, NULL) True bewerten?
+1 für die Einführung einiger Syntax ich nie realisiert in T-SQL! – gvee