繁体   English   中英

如果第3个表没有该值,则联接3个表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM