代码之家  ›  专栏  ›  技术社区  ›  FrenkyB

右连接返回的结果不在where集中

  •  0
  • FrenkyB  · 技术社区  · 6 年前

    我不明白为什么right join不能按预期返回结果。

    其中条件cleary表示return只会产生以下结果:

    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 |
    +----------+-------------+----------+----------+----------+
    

    为什么哪里的条件不按预期工作?

    以下是整个示例:

    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'
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Prahalad Gaggar    6 年前

    修改查询:

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

    • 在right join中,它将考虑是否从right表中提取数据

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