我有以下两个表
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
子句应该是什么样的?
答案 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)