Ich arbeite hier mit einer kleinen Anzeigekomplikation. Ich bin sicher, dass es eine IF / ELSE-Funktion gibt, die ich nur übersehen habe.
Ich habe 2 Tabellen, die ich abfrage (Kunden, Adressen). Der erste hat den Hauptdatensatz, aber der zweite kann einen Datensatz haben, zu dem LEFT JOIN gehören kann oder nicht.
Ich möchte eine Null anzeigen, wenn die Adresstabelle keinen Datensatz enthält. Und ich möchte nur 1 anzeigen, wenn ein Datensatz vorhanden ist.
Was ich bisher versucht habe:
SELECT c.name, COALESCE(a.addressid,0) AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123
Dieses erste Beispiel macht es nicht. Aber ich kann COALESCE falsch verwenden.
Wie kann ich eine 0 anzeigen, wenn null, und eine 1, wenn etwas vorhanden ist?
mysql
if-statement
Kaffeemonitor
quelle
quelle
Antworten:
COALESCE(a.addressid,0) AS addressexists
Verwenden Sie stattdessenCASE
:oder das einfachere:
Dies funktioniert, weil
TRUE
es wie1
in MySQL undFALSE
als angezeigt wird0
.quelle
quelle
Vorsicht, wenn Sie aus C / C ++ kommen und erwarten, dass dies funktioniert:
Selbst wenn 'name' im Gegensatz zu C nicht NULL ist, wird immer noch eine falsche Bedingung ausgelöst und die obige Anweisung gibt 0 zurück. Daher müssen Sie daran denken, explizit nach NULL oder einer leeren Zeichenfolge zu suchen:
PS Eugens Beispiel oben ist richtig , aber ich wollte diese Nuance klarstellen, da sie mich überrascht hat.
quelle
quelle
Eine andere Methode ohne WO, versuchen Sie dies ..
Wählt sowohl leere als auch NULL-Werte aus
Es wird null gesetzt, wenn es sich um eine leere Zeichenfolge handelt, und dies gilt auch für diese.
quelle
Sie können tatsächlich eine IF-Anweisung in den neuesten Versionen von MySQL verwenden.
IE:
quelle
In TSQL können Sie Folgendes versuchen:
SQL Server sollte funktionieren
quelle