左连接给出了错误的结果

时间:2018-01-03 09:20:22

标签: mysql join left-join

我有2个表格A和B.这2个表格共有1个表格:A.A1和B.B1。表A有800行,表B有500行。显然,表A中的某些行在表B中没有任何匹配的行。 现在,我希望通过发出以下查询来查看“A中哪些行与B中的行不匹配”:

select * from A 
LEFT JOIN B on A.A1 = B.B1 
where date(b.trt_date) = '2017-11-18' and a.tcs_type = 'SALES' 
order by a.tcs_no asc

此查询的结果与INNER JOIN相同。 为什么?

当我将此查询放入VIEW时,它会给出预期结果

这应该很简单。我很困惑。

我正在使用:mysql,navicat,sqlyog

2 个答案:

答案 0 :(得分:2)

您的查询:

select * from A 
LEFT JOIN B on A.A1 = B.B1 
where date(b.trt_date) = '2017-11-18' and a.tcs_type = 'SALES' 
order by a.tcs_no asc

将simillary作为INNER JOIN使用,因为你设置了WHERE条件:

date(b.trt_date) = '2017-11-18'

以这种方式切割b.trt_datenull的所有行。

ON的{​​{1}}子句中包含的条件是如何工作的:

  • 如果主表没有满足条件 - > Doens没有显示行
  • 如果主表的条件是正常但是辅助表的条件不正确 - >将包含辅助表的所有字段的行显示为LEFT JOIN
  • 如果主表和辅助表都可以 - >显示包含所有信息的行

答案 1 :(得分:0)

SELECT * from A 
LEFT JOIN B on A.A1 = B.B1 
WHERE B.A1 IS NULL

此处有类似帖子How to retrieve non-matching results in mysql