【发布时间】:2018-01-03 09:20:22
【问题描述】:
我有 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
【问题讨论】:
-
您在 where 子句中引用了表 B! date(b.trt_date) = xxx 将删除 B 中没有匹配行的所有行。您可能打算在 join 子句中包含该谓词。
-
ok .. 是的,我终于找到了答案。谢谢...你是对的
-
顺便提一下,date() 不能使用索引。如果你可以写成
b.trt_date BETWEEN '2017-11-18 00:00:00' AND '2017-11-18 23:59:59',那么它可以使用索引。 -
找出左连接的作用。了解如何清晰简洁地表达它。将事物放在引号中并不能澄清。澄清澄清。