具有多个布尔条件的mysql内部联接查询

具有多个布尔条件的mysql内部联接查询,mysql,sql,select,Mysql,Sql,Select,我有以下两张桌子 Table 1: creatives creative_id creative_name 1 xyz 2 pqr 3 abc Table 2: term_relationships creative_id term_id 1 1 1 2

我有以下两张桌子

 Table 1: creatives
 creative_id       creative_name
      1                xyz
      2                pqr
      3                abc

 Table 2: term_relationships
 creative_id       term_id
      1                1
      1                2
      1                3
      2                1
      2                2
      2                4
      3                1
      3                2
      3                3
我想连接上面的两个表,以获得包含creative的查询输出,creative的条件_id=1、2和3必须存在。对于上面的示例,查询输出中只能出现creatives 1 aka xyz和3 aka abc,因为creatives 2不满足上述条件

所以

where子句应该是什么样的

您可以这样做:

SELECT t.creative_id,t.term_id,c.creative_name
FROM term_relationships t INNER JOIN
     creatives c ON c.creative_id=t.creative_id
GROUP BY t.creative_id
HAVING SUM(CASE WHEN t.term_id IN (1,2,3) THEN 1 ELSE 0 END)=3
结果:

creative_id term_id creative_name
---------------------------------
1           1        xyz
3           1        abc   

示例结果。

执行此操作的一种方法是计算匹配项的数量,并检查其总和是否等于所需的匹配项数量:

SELECT *
FROM   creatives
WHERE  creative_id IN (SELECT   creative_id
                       FROM     term_relationship
                       WHERE    term_id IN (1, 2, 3)
                       GROUP BY creative_id
                       HAVING   COUNT(*) = 3)

请详细说明这个术语_id=1和2以及3必须存在,您的查询确实有效!如何将其加入creatives表?
SELECT *
FROM   creatives
WHERE  creative_id IN (SELECT   creative_id
                       FROM     term_relationship
                       WHERE    term_id IN (1, 2, 3)
                       GROUP BY creative_id
                       HAVING   COUNT(*) = 3)