首页 > 解决方案 > 右连接返回的结果不在 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'

标签: sql-servertsql

解决方案


修改您的查询:

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 子句”中时

  • 在这种情况下,它将根据您的条件过滤行

推荐阅读