Mistfinder: Sql Abfrage Union

Beitrag lesen

Warum sollte man nun ausgerechnet nur die 0 nicht verwenden?

Also so wie das in meinen Augen aussieht könnte die 0 eine gültige ID sein, wird aber offenbar als Merkmal für "kein Benutzer gewählt" genommen. Ich würde da auf eine, als ID per Definition ungültige Zahl (z.B. -1) zurückgreifen. Freilich gänge auch NULL oder FALSE, das würde aber einen strengen Typvergleich erfordern und müsste sehr genau getestet bzw. die Dokumentation sehr genau nachgelesen werden, wie ich gleich mal zeige:

mysql> SELECT 'Unbekannt' AS View, NULL AS Value UNION SELECT 'foo' AS FullName, '100' AS UserID;
+-----------+-------+
| View      | Value |
+-----------+-------+
| Unbekannt | NULL  |  # <- kein Typeswitch
| foo       | 100   |
+-----------+-------+
2 rows in set (0.01 sec)

mysql> SELECT 'Unbekannt' AS View, FALSE AS Value UNION SELECT 'foo' AS FullName, '100' AS UserID;
+-----------+-------+
| View      | Value |
+-----------+-------+
| Unbekannt | 0     |  # <- Nicht erwarteter Typeswitch von FALSE zu O
| foo       | 100   |
+-----------+-------+
2 rows in set (0.01 sec)

Was da ggf. bei einem Wechsel des DBMS passiert kann man nur erahnen. Mit

mysql> SELECT 'Unbekannt' AS View, -1 AS Value UNION SELECT 'foo' AS FullName, '100' AS UserID;
+-----------+-------+
| View      | Value |
+-----------+-------+
| Unbekannt | -1    |  # bleibt stets brav bei -1
| foo       | 100   |
+-----------+-------+
2 rows in set (0.00 sec)

ist das Problem indes vom Tisch. Und schneller geht es auch noch...

Und die Erde dreht sich trotzdem noch.

Nun, ich habe einen Hinweis zum ganz frühzeitigen "Mist vermeiden" gegeben. Es bringt vorliegend niemanden um wenn dem jemand nicht folgt und bei Programmieren seine eigenen Definitionen im Hinterkopf hat.