Frage
Ich versuche, den Wert eines anderen Feldes innerhalb eines IN verwenden.
SELECT types.id, title, auth_users.types
FROM types
LEFT JOIN auth_users ON auth_users.id IN (8,9)
WHERE types.id IN (1,2,3)
GROUP BY types.id
Arbeiten
SELECT types.id, title, auth_users.types
FROM types
LEFT JOIN auth_users ON auth_users.id IN (8,9)
WHERE types.id IN (auth_users.types)
GROUP BY types.id
funktioniert nicht
http://pastebin.com/m76ae0596 Weitere Informationen finden Sie hier
auth_users.types = 1,2,3
Lösung
Sie müssen Verwendung FIND_IN_SET
- diese Frage finden Sie unter: MySql: Select-Anweisung IN-Operator
Andere Tipps
Leider IN (...)
wird nicht versuchen, ein varchar-Feld-Wert zu analysieren, die Werte zu extrahieren Sie wollen gegen übereinstimmen.
Es besteht im Wesentlichen nur überprüft, ob "types.id" ist einer von "1, 2, 3" (dh. Nicht 1, 2 oder 3, aber der tatsächlichen Einzelwert "1, 2, 3").
Eine Möglichkeit, dies zu lösen, wäre eine Funktion in der Datenbank zu haben, dass gibt ein Ergebnis, und nimmt diesen varchar Wert in, analysiert ihn und kehren 3 Zeilen für Ihr Beispiel.
Other than that, müssen Sie entweder Rewrite LIKE verwenden (was schrecklich durchführen wird), oder Sie müssen diese Werte selbst analysieren und das Ergebnis in die SQL direkt vergeben.
Versuchen Sie Reihe Subqueries :
SELECT column1,column2,column3
FROM t1
WHERE (column1,column2,column3) IN
(SELECT column1,column2,column3 FROM t2);
EDIT:
Eigentlich an Ihrem Pastebin suchen, sind Sie „1,2,3“ in einer einzigen Zeile als varchar speichern? Das wird nicht an der Arbeit.
Ich glaube, er ist auf der Suche nach einem einfachen Join
LEFT JOIN auth_users ON types.id = auth_users.types
WHERE auth_users.id IN (8,9)