Domanda

Sto cercando di utilizzare il valore di un altro campo all'interno di 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

Opere

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

Non funziona

http://pastebin.com/m76ae0596 Maggiori informazioni possono essere trovate qui

auth_users.types = 1,2,3
È stato utile?

Soluzione

È necessario utilizzare FIND_IN_SET - vedere questa domanda: MySql: Select utilizzando IN operatore

Altri suggerimenti

Purtroppo, IN (...) non tenterà di analizzare un valore varchar-campo per estrarre i valori che si desidera per abbinare contro.

E 'fondamentalmente solo controlla se "types.id" è uno "1, 2, 3" (cioè. Non 1, 2 o 3, ma il valore effettivo singolo "1, 2, 3".)

Un modo per risolvere questo sarebbe avere una funzione nella base di dati che restituisce un gruppo di risultati, e prende quel valore varchar in, lo analizza e restituisce 3 righe per il vostro esempio.

Oltre a questo, è necessario o riscrivere per usare LIKE (che eseguirà orribilmente), o avete bisogno di analizzare quei valori stessi e mettere il risultato in SQL direttamente.

sottoquery fila :

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

EDIT:

In realtà, guardando il tuo pastebin, stai immagazzinando "1,2,3" in una singola riga come varchar? Che non sta andando a lavorare.

Credo che lui è alla ricerca di un semplice join

LEFT JOIN auth_users ON types.id = auth_users.types

dove auth_users.id IN (8,9)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top