Pregunta

Estoy tratando de utilizar el valor de otro campo dentro de un IN.

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

Obras

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

No funciona

http://pastebin.com/m76ae0596 Más información se puede encontrar aquí

auth_users.types = 1,2,3
¿Fue útil?

Solución

Es necesario utilizar FIND_IN_SET - ver esta pregunta: MySQL: instrucción Select utilizando en el operador

Otros consejos

Por desgracia, IN (...) no intentará analizar un valor de campo varchar para extraer los valores que desee para que coincida en contra.

Es básicamente sólo comprueba si "types.id" es uno de "1, 2, 3" (es decir. No 1, 2 o 3, pero el valor único real "1, 2, 3".)

Una manera de resolver esto sería tener una función en la base de datos que devuelve un conjunto de resultados y toma ese valor varchar en, lo procesa y devuelve 3 filas por su ejemplo.

Aparte de eso, es necesario volver a escribir ya sea para usar LIKE (que llevará a cabo horriblemente), o si tiene que analizar esos valores a ti mismo y colocar el resultado en el SQL directamente.

Trate subconsultas de registro :

 SELECT column1,column2,column3
   FROM t1
   WHERE (column1,column2,column3) IN
         (SELECT column1,column2,column3 FROM t2);

EDIT:

En realidad, mirando a su Pastebin, estás almacenando "1,2,3" en una sola fila como un varchar? Eso no va a funcionar.

Creo que él está buscando un simple unirse a

LEFT JOIN auth_users EN types.id = auth_users.types

DONDE EN auth_users.id (8,9)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top