我有客户表,项目表和问题表。
clients cid cname ----------- c1 ca c2 cb c3 cc projects pid pname cid ---------------- p1 pa c1 p2 pb c1 p3 pc c1 p4 pd c2 p5 pe c2 issues iid iname pid ---------------- i1 ia p1 i2 ib p2 i3 ic p4 i4 id p5
我希望客户的项目都存在问题。这是c2 如何为此编写MYSQL查询?
答案 0 :(得分:2)
以下查询应该为您提供包含问题表中列出的所有项目的客户端ID列表:
SELECT p.cid
FROM projects AS p LEFT JOIN issues AS i ON p.pid=i.pid
GROUP BY p.cid
HAVING COUNT(*)=SUM(CASE WHEN i.iid is NULL THEN 0 ELSE 1 END);
我使用LEFT JOIN
,以便获得projects
的所有行,如果pid
中issues
不存在问题的值(例如{{}} 1}})将是i.iid
。
注意:我使用了前进的SQL小提示符进行了更新。
答案 1 :(得分:2)
尝试使用having
子句:
select
c.cid,
c.cname
from clients c
left join projects p
on c.cid = p.cid
left join issues i
on p.pid = i.pid
group by c.cid, c.cname
having count(distinct p.pid) = count(distinct i.pid) and count(distinct p.pid) > 0
在这里查看SQLFiddle演示。