2011-09-21 41 views
11

我做了我自己的论坛。在进行搜索时,我想找到两个(或更多)特定用户参与的任何线程。我想出了这个:MySQL in-operator必须匹配所有值吗?

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

之前意识到这实际上意味着'1' OR '52512'

有没有办法让它工作,以便所有的id都匹配?

+0

请给你实际的表结构,包括PK。 –

+0

请发布您的真实代码或至少是table1和table2。我的第一个aproach让我加入两倍的线程表。请阅读这篇文章和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 –

回答

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

两个(或更多)特定用户,所以它应该是'> = 2' –

+3

@ViswanathanIyer但是'IN'子句中只指定了2个值。如果目标是确保您匹配'IN'子句中列出的所有值,那么'HAVING'中测试的值应该与为'IN'指定的值的数量匹配。 –

+0

@Joe - ViswanathanIyer不是OP。 –

相关问题