Prioritäten in der WHERE - Bedingung setzbar ?

Hallo ich möchte in einem MySql-Select eine Gewichtung in der WHERE-Bedingung vornehmen.
D.h. er soll erst die erste Bedingung versuchen und wenn die nicht klappt dann doch die zweite nehmen.
Bei mir nimmt er aber leider immer die zweite.

Es ist nämlich so das eigentlich aus einer zweiten Tabelle (bbbbb) ein Wert geholt werden soll… so eine Art Zusatzinfo.
Die kann aber auch mal fehlen die Tabelle… und dann soll eben einfach die Zusatzinfo fehlen … nicht aber die Daten insgesamt.

Hat jemand eine Idee ? Unten der Select (im Orginal sieht er ein bischen anders aus)

SELECT a.\* 
FROM aaaaa AS a, bbbbb AS b 
WHERE 
a.history LIKE '%,7,%' 
AND 
(
 (
 b.tbl = 'aaaaa' 
 AND `a`.`id` = `b`.`tbl_id` 
 )
 OR 
 ((((1 AND 2 AND 3 AND 4 AND 5 AND 6 AND 7 AND 8 AND 9 AND 10 AND 11 AND 12 AND 13 AND 14 AND 15 AND 16 ))))
)
GROUP BY a.id

Hmmmm, verstehe nur Bahnhof (und antworte trotzdem, weil ich den Verdacht habe, dass es allen so geht).

Also, was meinst du mit „Bedingung nehmen“. Die WHERE-Bedingung ist ein boolscher Ausdruck der ausgewertet wird, entweder ist er true oder false und je nachdem wird der Datensatz in das Ergebnis genommen oder nicht.

Welche Teile des WHERE-Ausdrucks schließlich wie in welcher Reihenfolge ausgewertet werden sollte dir egal sein und hat keinen Einfluss auf das Ergebnis. Es müssen nicht immer alle Teilausdrücke ausgewertet werden (z. B. a OR b OR c, wenn a true ist kann man sich b und c sparen). Allgemein ist es eine Unart bei solchen Ausdrücken eine Logik einzubauen die auf der Reihenfolge der Auswertung beruht (weils komplett unübersichtlich und undurchschaubar ist). Schaut mir aber auch nicht so aus als ob du was in die Richtung machen möchtest.

Eventuell ist das was du brauchst ein OUTER JOIN. Was du machst ist ein INNER JOIN, es wird aus zwei Tabellen das Produkt gebildet und dann nur noch die Datensätze auf die die WHERE-Klausel zutrifft aufgenommen, und über selbige garantierst du dann, dass nur Datensätze die zusammengehören geliefert werden (a.id=b.id).

Im Gegensatz dazu liefert ein OUTER JOIN alle Datensätze von der einen Tabelle, auch wenn es keinen dazugehörigen in der anderen Tabelle gibt.

Schaut etwa so aus:

SELECT \* FROM a LEFT JOIN b ON a.id=b.id WHERE a.feld='HUHU'

Bin mir nicht sicher ob der Syntax mit MySQL hinhaut, aber soweit ich mich erinnern kann verwendet MySQL Microsoft-Syntax und soweit ich mich wiederum diesbezüglich erinnern kann müßte das da oben unter MS funktionieren.

Grüße, Robert

Suppper !!! Ja !!!
Ein OUTER JOIN
hab ich gebraucht !
Ich denke das müsste hinhauen.

Ich hab jetzt mal
SELECT a.id, b.closed FROM lcip_mindtree_2 AS a LEFT JOIN lcip_mindtreesituation AS b ON a.id=b.tbl_id

Wenn kein Eintrag in b vorhanden liefert er einfach NULL , aber zeigt die restlichen Werte trotzdem an.
Das ist genau das was ich gesucht hatte !
Ich hatte es fast geschafft mit total komplizierten GROUP BY und ORDER und WHERE Zeugs… wobei fast ist falsch… ich hätts nie geschafft.
Es geht sicher nur mit OUTER JOIN .
Hast mir sehr geholfen - Danke :smile: !

Gruß Sebastian