sql - 即使右连接表中没有引用,也完全获取左表数据
问题描述
使用的数据库:SQL Server
我有三张桌子A,B,C。
表A:
------------------
| ID | Name |
------------------
| 1 | X |
------------------
| 2 | Y |
------------------
表 B:
----------------------
| ID | Date |
----------------------
| 1 | 2019-11-06 |
----------------------
| 2 | 2019-11-05 |
----------------------
表 C:
----------------------------------
| ID | B.ID | A.ID | Amount |
----------------------------------
| 1 | 1 | 1 | 500 |
----------------------------------
| 2 | 2 | 2 | 1000 |
----------------------------------
我想得到的结果是表 A.Name 的所有条目及其在表 C.amount 中的金额,其中表 B.Date = 2019-11-06。结果集应该包括所有 A.name 条目,即使它在表 C 中没有引用。
要求的结果是:
-----------------------
| A.Name | C.Amount |
-----------------------
| X | 500 |
-----------------------
| Y | NULL |
-----------------------
我试过的代码:
SELECT A.Name,C.Amount
FROM A
LEFT OUTER JOIN C ON C.A_ID=A.ID
LEFT OUTER JOIN B ON B.ID = C.B_ID ON
WHERE B.Date='2019-11-06'
我用上面的代码得到的结果是:
------------------
| Name | Amount |
------------------
| X | 500 |
------------------
结果中没有 Y,这是因为在该特定日期没有 Y 条目。我只想将 Y 和数量显示为空或零。
请帮我解决一下这个。
解决方案
您的 之间没有关系A and B
,因此我们需要在进行左连接之前B and C
使用 asubquery
进行分组过滤。date
SELECT A.Name, t1.Amount
FROM A
LEFT JOIN
(SELECT C.A_ID, C.Amount FROM C
INNER JOIN B ON B.ID = C.B_ID
WHERE B.Date='2019-11-06') t1
ON t1.A_ID=A.ID
推荐阅读
- laravel - 在 null 上调用成员函数 hasVerifiedEmail()
- javascript - 所需数量之间的转换
- marklogic - 已解析的查询在 ML9 中不包含 qtextpre
- java - CodeChef 问题 NUKES 上的超时和 NZEC
- macos - ./vcpkg 安装权限被拒绝
- python - 将多行 url 请求转换为 Python 中的函数
- android - 设置安卓模拟器相机分辨率
- python - 有没有办法将环境变量传递给python脚本?
- javascript - 一段时间后,D3js 碰撞停止工作
- unity3d - Unity UWP (Hololens) 获取可用磁盘空间