具有多个布尔条件的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)