Mysql 如果第三个表没有该值,请连接三个表
表1 id、用户id、事件id、名称 表2 eventid、zoneid、userid 表3 事件ID、用户ID、状态 如果所有三个表都有eventid,则意味着我不想选择该记录(我的意思是如果表3有eventid),否则我需要选择记录 我试着提出我的问题Mysql 如果第三个表没有该值,请连接三个表,mysql,sql,Mysql,Sql,表1 id、用户id、事件id、名称 表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
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
在没有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
第三个表上的左连接和条件
,其中C.eventid为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
第三个表上的左连接和条件
,其中C.eventid为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
对通过左/右外部联接联接的表应用WHERE条件(如其他一些答案所建议的)实际上会使其成为常规联接。
发布的其他示例要求c1.eventid等于c3.eventid,c3.eventid等于NULL——结果很可能不是您期望的结果,这取决于数据库如何处理c1.eventid=c3.eventid
,如果两者都为NULL(我必须仔细阅读)
对通过左/右外部联接联接的表应用WHERE条件(如其他一些答案所建议的)实际上会使其成为常规联接。
发布的其他示例要求c1.eventid等于c3.eventid,c3.eventid等于NULL-很可能结果不是您期望的结果,这取决于数据库如何处理
c1.eventid=c3.eventid
如果两者都为NULL(我必须仔细阅读)。似乎您误读了其他答案。外部联接表上where子句中的唯一条件是id不为null
。这正好给出了所需要的:表1+表2,其中不存在表3。不过,我还是更喜欢你的方法。我认为它更具可读性,因为它实际上说:从表1和表2中读取,其中表3中不存在匹配的记录。我认为左外边加入了一个诡计而不是直截了当的方式。你是对的。我只是有太多的例子,人们做左连接,然后用条件破坏它。检查NULL
不会让我忘记这一点,但与您一样,我发现该解决方案的可读性较低。:)如果他不需要表3中的任何记录,那么这是最好的方法。似乎你误读了其他答案。外部联接表上where子句中的唯一条件是id不为null
。这正好给出了所需要的:表1+表2,其中不存在表3。不过,我还是更喜欢你的方法。我认为它更具可读性,因为它实际上说:从表1和表2中读取,其中表3中不存在匹配的记录。我认为左外边加入了一个诡计而不是直截了当的方式。你是对的。我只是有太多的例子,人们做左连接,然后用条件破坏它。检查NULL
不会让我忘记这一点,但与您一样,我发现该解决方案的可读性较低。:)如果他不需要表3中的任何记录,那么这是最好的方法。