sql-server - 右连接返回的结果不在 where 集合中
问题描述
我不明白为什么右连接没有按预期返回结果。
条件 cleary 说只返回结果:
R.REIN_SRT = 'A' AND R.REIN_STA = '9'
但相反,它返回表中的所有内容,就像没有 where 条件一样:
+----------+-------------+----------+----------+----------+
| INVE_KEY | INVE_NME | INVE_KEY | REIN_SRT | REIN_STA |
+----------+-------------+----------+----------+----------+
| NULL | NULL | 1 | S | 1 |
| 1 | CHAIR BLACK | 1 | A | 9 |
| NULL | NULL | 1 | B | 2 |
| NULL | NULL | 1 | S | 1 |
| NULL | NULL | 1 | S | 1 |
| NULL | NULL | 1 | S | 1 |
| NULL | NULL | 1 | S | 1 |
| NULL | NULL | 1 | S | 1 |
| NULL | NULL | 1 | S | 1 |
+----------+-------------+----------+----------+----------+
为什么 where 条件没有按预期工作?
这是整个示例:
DECLARE @JEINVE TABLE
(
INVE_KEY INT,
INVE_NME VARCHAR(100)
)
DECLARE @JEREIN TABLE
(
INVE_KEY INT,
REIN_SRT CHAR(1),
REIN_STA CHAR(1)
)
INSERT INTO @JEINVE(INVE_KEY, INVE_NME)
VALUES(1, 'CHAIR BLACK'),(2, 'WHITE TABLE'),(3, 'BLACK CANDLE')
INSERT INTO @JEREIN(INVE_KEY,REIN_SRT,REIN_STA)
VALUES(1,'S','1'),(1,'A','9'),(1,'B','2'),(1,'S','1'),(1,'S','1'),(1,'S','1'),(1,'S','1'),(1,'S','1'),(1,'S','1')
SELECT *
FROM @JEINVE INVE RIGHT JOIN @JEREIN R
ON INVE.INVE_KEY = R.INVE_KEY
AND R.REIN_SRT = 'A' AND R.REIN_STA = '9'
解决方案
修改您的查询:
SELECT *
FROM @JEINVE INVE
RIGHT JOIN @JEREIN R
ON INVE.INVE_KEY = R.INVE_KEY
WHERE R.REIN_SRT = 'A' AND R.REIN_STA = '9'
更改您的查询:
现存的
AND R.REIN_SRT = 'A' AND R.REIN_STA = '9'
新的:
WHERE R.REIN_SRT = 'A' AND R.REIN_STA = '9'
解释:
当您将条件放入“ON CLAUSE”时
- 在右连接中,它会考虑是否从右表中提取数据
但是当你把条件放在“WHERE 子句”中时
- 在这种情况下,它将根据您的条件过滤行
推荐阅读
- xamarin - App MediaFrameReader 总是返回空位图
- powershell - Powershell:我可以使用 Get-WmiObject Win32_NetworkAdapterConfiguration 从非活动网络适配器获取 IP 地址吗?
- php - php - csv 导出添加绝对路径输出
- c - 如何在 system() 中使用 C 代码变量
- flutter - SingleChildScrollView not working in a nested Column. My second column is not scrolling using SingleChildScrollView
- java - 迭代Java中的列表
- flutter - 如何在 Flutter 中创建包含对象的下拉列表
- javascript - 使用 puppeteer 和 node.js 下载“数据:”图像/文件
- laravel - Auth::Attempt without password if its social login
- r - R ggplot2 添加图例