2011-09-21 21 views
11

Stworzyłem własne forum. Podczas wyszukiwania chcę znaleźć wszystkie wątki, w których uczestniczyło dwóch (lub więcej) określonych użytkowników. Wpadłem na to:Operator-operator MySQL musi pasować do wszystkich wartości?

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

Przed sobie sprawę, że to faktycznie oznacza '1' OR '52512'.

Czy jest jakiś sposób, aby to działało, aby wszystkie identyfikatory musiały pasować?

+0

Proszę podać rzeczywiste struktury stołu, w tym PK. –

+0

proszę zamieścić swój prawdziwy kod lub przynajmniej zawartość table1 i table2. mój pierwszy aproach sprawia, że ​​łączę się dwukrotnie w tabeli wątków. przeczytaj ten post i anwser http://stackoverflow.com/questions/7492699/how-can-i-mstructure-a-query-to-give-me-only-the-rows-that-match-all-values- in-ac/7493309 # 7493309 –

Odpowiedz

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

dwóch (lub więcej) konkretnych użytkowników, więc powinno być '> = 2' –

+3

@ViswanathanIyer Ale są tylko 2 wartości określone w klauzuli" IN ". Jeśli celem jest upewnienie się, że pasujesz do wszystkich wartości wymienionych w klauzuli 'IN', to wartość testowana w' HAVING' powinna odpowiadać liczbie wartości określonej dla 'IN'. –

+0

@Joe - ViswanathanIyer nie jest OP. –