VERSCHMELZEN Sie mit NULL
Fand ich dieses snippet von SQL in eine Ansicht, und ich bin ziemlich verwirrt, indem es den Zweck (tatsächliche SQL-gekürzt aus Platzgründen):
SELECT
COALESCE(b.Foo, NULL) AS Foo
FROM a
LEFT JOIN b ON b.aId=a.Id
Ich kann mir nicht vorstellen, einen einzigen Grund, der Zweck der Koaleszenz mit null statt nur das zu tun diese:
SELECT
b.Foo AS Foo
FROM a
LEFT JOIN b ON b.aId=a.Id
Oder zumindest nicht über die NULL explizit:
SELECT
COALESCE(b.Foo) AS Foo
FROM a
LEFT JOIN b ON b.aId=a.Id
Ich weiß nicht, wer erstellt diese (ich kann also nicht Fragen), Wann wurde es verfasst wurde, oder für was bestimmtes MS-SQL-Server-version es geschrieben wurde, für (vor 2008 jedoch sicher).
gibt es keinen stichhaltigen Grund, zu verschmelzen mit NULL statt einfach nur die Auswahl der Spalte direkt? ich kann mir nicht helfen, aber lachen, und schreiben es aus wie ein rookie-Fehler, aber es macht mich Frage mich, ob es einigen "fringe-Fall", dass weiß ich nicht.
- Scheint wie ein rookie Fehler zu mir.
- Oder die Anforderung hat mehrmals ändern, damit diese Abfrage habe geändert mehrmals von verschiedenen Entwicklern. Vielleicht COALESCE(b.Foo, NULL) war COALESCE(b.Foo, [einige Wert/Ausdruck]) vor. Dann die Anforderung geändert wird. So kann jemand der gerade geändert zu VERSCHMELZEN(b.Foo, NULL), ohne zu denken.
- Dies kann ein hacky Weg, um einen Fehler auslöst, wenn "b".Foo war NULL. Ob es gültig ist oder nicht, ist eine andere Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du hast Recht - es gibt keinen Grund zu verwenden:
...denn wenn
b.foo
NULL ist, könnten Sie genauso gut mit:...vorausgesetzt, dass Sie wollen zu wissen, ob der Wert null ist.
Ich denke, es könnte eine Kante Fall, aber es ist sehr historisch - es ist ein bisschen eine Vermutung, aber könnte es umgeben die situation, wo b ist.foo = '' z.B. einen string von Leerzeichen.
Zurück weit genug in SQL und LTrim(' ') null zurück (6 /6.5), so Frage ich mich, ob Coalesce auf eine leere Zeichenfolge bewerten auch Sie auf null, wenn es einer ist dann der Mechanismus wurde genutzt, um wiederum Leerzeichen nur, in null-Werte? (Wenn alle Werte als null ausgewertet, Coalesce, wird Null zurückgegeben.)
Es ist eine Vermutung und ich kann es nicht testen, aber sollte nicht schwer zu überprüfen.
Ich würde es nutzen, wenn ich mehrere Spalten, die ich will, um zu überprüfen, ob Sie alle null sind oder nicht, statt mit UND und IST NICHT NULL mit jeder Spalte, ich kann mit einer einzigen VERSCHMELZEN, die den code einfacher und lesbarer, zum Beispiel