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

时间:2015-06-09 05:47:09

标签: 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
      1                3
      2                1
      2                2
      2                4
      3                1
      3                2
      3                3

我想加入上述2个表格,以获取包含term_id = 1 AND 2 AND 3必须存在的广告素材的查询输出。对于上面的示例,由于广告素材2不满足上述条件,因此查询输出中只能包含广告素材1(aka xyz)和3(aka abc)。

所以

SELECT * 
FROM term_id INNER JOIN 
     creatives ON term_id.creative_id = creatives.creative_id 
WHERE ????

where子句应该是什么样的?

2 个答案:

答案 0 :(得分:2)

你可以这样做:

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   

SQL Fiddle中的示例结果。

答案 1 :(得分:2)

执行此操作的一种方法是计算匹配条件的数量,并检查它总计达到您想要的匹配数量:

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)