Rouven: mysql-Frage: IF

Beitrag lesen

Hello,

SELECT user.name FROM user, suche WHERE user.alter < suche.alter

du hast eine Suchabfrage in der Tabelle gespeichert? Das erscheint mir zwar wenig sinnvoll, aber vmtl. weißt du besser als ich was du da machst...

Für Joins empfiehlt sich im allgemeinen eine explizite Schreibweise, sie weist klar aus, was wie zusammengehört, vgl. unsere Datenbankartikel zu Joins.

Es kann also sein, dass suche.alter gleich NULL ist! Das hätte folgendes zur Folge:

du sprichst bildlich, oder? Das Statement bleibt ja unverändert. Du möchtest also alle Datensätze, bei denen das alter kleiner ist als die Suchangabe, oder bei denen es gar keine Suchangabe gibt. Hervorragende Anwendung für einen LEFT-JOIN:

  
SELECT user.name  
FROM user LEFT JOIN suche  
ON user.alter < suche.alter  

Alternativ in einer Nicht-Left-Join-Variante:

  
SELECT user.name  
FROM user, suche  
WHERE (user.alter < suche.alter) OR (suche.alter IS NULL)  

Irgendetwas sagt mir aber, dass du in beiden Fällen noch nicht so 100% dein erwartetes Ergebnis bekommen wirst, da du defacto ein volles Kreuzprodukt bildest und davon doch eine ganze Menge an Sätzen überbehälst. Aber wie gesagt, du wirst deine Datenstruktur besser kennen als ich.

MfG
Rouven

--
-------------------
sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
Death is nature's way of telling you to slow down.