Is there something in MySQL like IN but which uses AND instead of OR?

前端 未结 1 1353
忘掉有多难
忘掉有多难 2020-12-11 06:31

I need a SQL statement to retrieve records where it key (or any column) is in a associate table, for example:

documentId termId
4             1
4                     


        
相关标签:
1条回答
  • 2020-12-11 07:34

    There's no straight forward functionality, but there are two options:

    Using GROUP BY/HAVING


      SELECT t.documentid
        FROM TABLE t
       WHERE t.termid IN (1,2,3)
    GROUP BY t.documentid
      HAVING COUNT(DISINCT t.termid) = 3
    

    The caveat is that you have to use HAVING COUNT(DISTINCT because duplicates of termid being 2 for the same documentid would be a false positive. And the COUNT has to equal the number of termid values in the IN clause.

    Using JOINs


    SELECT t.documentid
      FROM TABLE t
      JOIN TABLE x ON x.termid = t.termid
                  AND x.termid = 1
      JOIN TABLE y ON y.termid = t.termid
                  AND y.termid = 2
      JOIN TABLE z ON z.termid = t.termid
                  AND z.termid = 3
    

    But this one can be a pain for handling criteria that changes a lot.

    0 讨论(0)
提交回复
热议问题