[英]join 3 tables if 3rd table does not have that value
表格1
id,userid,eventid,名称
表2
eventid,zoneid,userid
表3
事件ID,用户ID,状态
如果所有三个具有eventid的表意味着我不想选择该记录(我的意思是如果表3具有eventid),则我需要选择记录
我试过我的查询
SELECT
*
FROM
`table1` c1
INNER JOIN `table2` c2 ON c2.eventid = c1.eventid
LEFT JOIN table3 c3 ON c3.eventid = c1.eventid
WHERE
c2.zoneid=2
AND c1.active='1'
GROUP BY
c1.eventid
在没有c3的地方添加where子句:
SELECT *
FROM `table1` c1
INNER JOIN `table2` c2 ON c2.eventid = c1.eventid
LEFT JOIN table3 c3 ON c3.eventid = c1.eventid
WHERE c2.zoneid=2 AND c1.active='1'
AND c3.id IS NULL
group by c1.eventid
SELECT
*
FROM
`table1` c1
INNER JOIN `table2` c2 ON c2.eventid = c1.eventid
WHERE
c2.zoneid=2
AND c1.active='1'
AND NOT EXISTS (SELECT * FROM table3 c3 WHERE c3.eventid = c1.eventid)
GROUP BY
c1.eventid
在通过LEFT / RIGHT OUTER JOIN连接的表上应用WHERE条件(如其他一些答案所建议的那样)实际上会使它成为常规连接。 已发布的其他示例要求c1.eventid等于c3.eventid,而c3.eventid为NULL-根据数据库对待c1.eventid = c3.eventid
,结果很可能不是您期望的结果如果两者都为NULL(我必须对此进行阅读)。
应该在第三张表上的左连接和条件WHERE C.eventid IS NULL
起作用。
SELECT *
FROM table1 A
INNER JOIN table2 B
ON A.eventid = B.eventid
LEFT OUTER JOIN table3 C
ON A.eventid = C.eventid
WHERE C.eventid IS NULL
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.