MrSpoocy: Verhalten von "IN" in WHERE klausel / LEFT JOIN auch bei NULL ?

Beitrag lesen

Hi,

ich habe da 2 bescheidene Fragen.
Zum 1nen, wenn man in der WHERE Klausel "abc IN (1,5,8)" macht, würde das für mich so aussehen als würde er die komplette tablle durchgehen und prüfen ob abc 1,5 oder 8 ist. Ich persönlich denke aber das MySQL das so optimiert das die Klausel das gleiche ist als würde man "WHERE abc = 1 OR abc = 5 OR abc = 8" schreiben. Zumal abc in Index Schlüssel ist.

Geh ich in der Annahme richtig ?
Kurz gesagt, geht er bei "IN" direkt auf die Index Schlüssel oder lädt er doch die ganze Tabelle ?

Meine 2te frage. Wenn ich "abc IN (1,5,7,5)" mache, wir der 2te "5" unterschlagen bei der Ausgabe, wie kann ich es machen das trotz doppelter Einträge bei der Ausgabe wirklich alle ausgegeben werden ?

Und meine 3te frage..

SELECT * FROm table AS t1  
LEFT JOIN table2 AS t2 ON t2.id=t1.ex1  
LEFT JOIN table2 AS t3 ON t3.id=t1.ex2  
LEFT JOIN table2 AS t4 ON t4.id=t1.ex3  
LEFT JOIN table2 AS t5 ON t5.id=t1.ex4  
WHERE CONCAT_WS(' ',t2.name,t3.name,t4.name,t5.name) LIKE '%bal%bla%'  

Wie ihr seht ist da schon mal 4x join auf 1ne Tabelle. Das lässt sich so erklären das tabele 1 4 Felder hat welche ID's zu "erweiterungen" enthalten. Und Ich brauche in der Abfrage halt alle Namen der Erweiterungen. Sodas das Auto dann z.b. "VW Max Power GT3" heißt weil Max, Power und GT3 sind in dem Fall 3 Erweiterungen.

Meine frage nun dazu ist, wenn t3.ex2 keinen wert hat, ob MySQL diesen LEFT JOIN dann ignoriert als würde er gar nicht da stehen ? Wenn nein, jemand eine Idee wie man das ändern kann oder vielleicht eine andere Art der Struktur der DB ?

mfg Spoocy