2011-09-21 9 views
11

Ho creato il mio forum. Quando faccio una ricerca voglio trovare qualsiasi thread in cui hanno partecipato due (o più) utenti specifici. Sono arrivato fino a questo:L'operatore di MySQL deve corrispondere a tutti i valori?

SELECT * FROM table1 INNER JOIN table2 
ON table1.threadid=table2.threadid 
WHERE table2.threadcontributor IN ('1','52512') 

Prima di rendersi conto che in realtà significa '1' OR '52512'.

C'è un modo per farlo funzionare in modo che tutti gli ID devono corrispondere?

+0

Si prega di fornire le strutture attuali della tabella tra cui PK. –

+0

per favore pubblica il tuo codice reale o almeno cosa sono table1 e table2. il mio primo aproach mi fa unire due volte il tavolo dei thread. per favore leggi questo post e anwser http://stackoverflow.com/questions/7492699/how-can-i-structure-a-query-to-give-me-only-the-rows-that-match-all-values- in-ac/7493309 # 7493309 –

risposta

20
SELECT * 
    FROM table1 
     INNER JOIN table2 
      ON table1.threadid=table2.threadid 
    WHERE table2.threadcontributor IN ('1','52512') 
    GROUP BY table1.PrimaryKey 
    HAVING COUNT(DISTINCT table2.threadcontributor) = 2 
+0

due (o più) utenti specifici quindi dovrebbe essere '> = 2' –

+3

@ViswanathanIyer Ma ci sono solo 2 valori specificati nella clausola' IN'. Se l'obiettivo è assicurarsi di abbinare tutti i valori elencati nella clausola 'IN', allora il valore testato in' HAVING' dovrebbe corrispondere al numero di valori specificati per 'IN'. –

+0

@Joe - ViswanathanIyer non è l'OP. –

Problemi correlati