sql - sql左连接问题没有给出右表不匹配的结果
问题描述
我想要左表中的所有记录和右表中的匹配记录,但下面的查询没有给出正确的结果:
select a.date,b.amt,b.code,c.type
from (select date from t where date is between '2017-04-01' and '2018-09-30')a
on a.date = b.date and a.name = b.name left join
c on c.date = b.date and c.name = b.name or c.name is null
group by a.date,b.amt,b.code,c.type
我看不到表 b 中所有代码的值。它只返回表 c 中的匹配项
解决方案
当您执行 aLEFT JOIN
时,您将从第一个表中获取所有行,如果第一个连接条件没有匹配项,则表 x 的结果记录将是 NULL 记录,这就是您使用 AND 运算符 'c 的原因.name IS NULL' 但我认为您的查询存在一些问题。对我来说已经有一段时间了,所以我尽量不在这里出错,但是您的 FROM 子句中似乎没有表名,并且您的选择不能在 from 子句中(我不认为) ...也许我错了,但我必须清理声明以了解您做得更好...所以请澄清一下,我可以改进我的答案。
SELECT
[a].[date] AS 'Date'
,[b].[amt] AS 'Amount'
,[b].[code] AS 'Code'
,[c].[type] AS 'Type'
FROM [table].[name] (NOLOCK)
LEFT JOIN [table].[name] (NOLOCK) date ON [c].[date] = [b].[date]
LEFT JOIN [table].[name] (NOLOCK) name ON [c].[name] = [b].[name]
WHERE (SELECT date
FROM [t]
WHERE DATEADD (hh,-6, DATEADD (ss,[table].[name],'1970')) BETWEEN '2017-04-01' AND '2018-09-30')
AND [a].[date] = [b].[date] //Not sure if this is what you meant
AND [a].[name] = [b].[name]
AND [c].[name] IS NULL
GROUP BY [a].[date],[b].[amt],[b].[code],[c].[type]
推荐阅读
- sql - 使用 apex oracle 在 mongoDB 的 baise64 中记录一张照片
- javascript - jquery-如何验证签名输入?
- python - Python多处理执行整个代码并且它以错误的顺序执行
- python - 如果 on_delete 设置为 models.PROTECT 会触发删除功能吗?
- xamarin - 我的 Xamarin Forms Android 在高级选项中只有一个支持的 ABI。是否应该全部选中?
- performance - Tensorflow - 添加 Dropout 层显着增加推理时间
- http - If-None-Match 标头忽略 Content-Type 和 Vary
- scala - 无法识别的选项 -J-Xmx4G with sbt
- python - pandas 检查 DataFrame 中的单个值是否为数字
- vue.js - 如何使用 Vuejs 在另一个应用程序中导入应用程序