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
War es hilfreich?

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)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top