Select CASE Abfrage (MysQL)
hawkmaster
- datenbank
0 dedlfix0 hawkmaster0 dedlfix
Hallo zusammen,
Folgende Abfrage auf einem MySQL 5:
SELECT A.TypeID, A.Name, B.TypeID AS TestOutput
FROM mytype A
LEFT JOIN constraint B ON B.TypeID = A.TypeID
GROUP BY A.TypeID
Ausgabe:
----------------------------------
TypeID Name TestOutput
1 Hallo1 NULL
2 Hallo2 NULL
10 Hallo10 10
20 Hallo20 20
30 Hallo30 30
Bei der TypeID 1 und 2 steht in der Spalte TestOutput NULL da diese IDs nicht in der Tabelle constraint vorkommen.
Ich wollte mal versuchen, ob es irgendwie geht das der Output ein "false" enthält, wenn es die TypeID in "constraint" nicht gibt und ein "true" wenn es sie gibt.
Wenn ich nun versuche in diese Abfrage ein "Case" einzubauen:
SELECT
A.TypeID, A.Name,B.TypeID AS TestOutput,
CASE
B.TypeID
WHEN NULL
THEN 'false'
ELSE 'true'
END AS CheckType
FROM
mytype A
LEFT JOIN
constraint B ON B.TypeID = A.TypeID
GROUP BY A.TypeID
Ich dachte man könnte hier vielleicht nach den NULL Werten Abfragen. Das klappt so aber nicht.
Auch mit COUNT und "Anzahl" klappt es so nicht, da es natürlich keine Spalte "Anzahl" gibt.
SELECT
A.TypeID, A.Name,COUNT(B.TypeID) AS Anzahl,
CASE
B.TypeID
WHEN 0
THEN 'false'
ELSE 'true'
END AS CheckType
FROM
mytype A
LEFT JOIN
constraint B ON B.TypeID = A.TypeID
GROUP BY A.TypeID
Ich kann natürlich gleich nur mit "Count" arbeiten ohne CASE und nur prüfen, ob es 0 gibt oder nicht. Mich interessiert es nur, ob und wie so etwas mit CASE machbar wäre
vielen Dank und viele Grüße
hawk
Hi!
Ich dachte man könnte hier vielleicht nach den NULL Werten Abfragen. Das klappt so aber nicht.
NULL ist ein spezieller Wert. Wenn er in einem Ausdruck auftaucht, ist dessen Ergebnis stets NULL. Da NULL im boolschen Kontext zu false evaluiert, kann man nicht auf einfache Weise positiv auf NULL testen. Es gibt neben dem Operator IS (NOT) NULL spezielle Funktionen, die NULL berücksichtigen und an ihrem Namen zu erkennen sind (ISNULL(), IFNULL(), NULLIF()) und COALESCE(). In deinem Fall kommst du mit IFNULL() zum Ziel, und das deutlich kürzer als mit CASE.
Lo!
Hi dedlfix,
danke dir für den Hinweis.
Das klappt soweit. Es ist allerdings so das man kein "true" und "false" als Output haben kann wie bei Case.
SELECT A.TypeID, A.Name, B.TypeID AS TestOutput,
IFNULL(B.TypeID,'false') AS Installed
FROM mytype A
LEFT JOIN constraint B ON B.TypeID = A.TypeID
GROUP BY A.TypeID
Ausgabe:
---------------------------------------------------
TypeID Name TestOutput Installed
1 Hallo1 NULL false
2 Hallo2 NULL false
10 Hallo10 10 10
20 Hallo20 20 20
30 Hallo30 30 30
Aber ist auf jedenfall auch eine gute Lösung.
Hi!
Das klappt soweit. Es ist allerdings so das man kein "true" und "false" als Output haben kann wie bei Case.
Ah, IFNULL() hat keinen eigenen Then-Zweig. Dann kannst du immerhin noch IF() nehmen und als Bedingung auf IS NULL testen.
Lo!