Right Join无法正常工作SQL Server

时间:2018-04-13 10:34:54

标签: sql sql-server join

我试图在一个真实的例子中使用正确的连接语法,遗憾的是我无法展示,但我已经尽可能准确地演示了它。

我有这些表格:

CREATE TABLE Order1 
(
    PersonName varchar(10),
    Month varchar(10),
    Year1 int
);

CREATE TABLE Quote 
(
    PersonName varchar(10),
    Month varchar(10),
    Year1 int,
    Quotes int
);

INSERT INTO Order1 (PersonName, Month,Year1)
VALUES ('Fred', 'Apr', 2018);

INSERT INTO Quote (PersonName, Month, Year1, Quotes)
VALUES ('Fred', 'Apr', 2018,5),
       ('Fred', 'Jan', 2018,7),
       ('Fred', 'Feb' , 2018,23),
       ('Fred', 'Mar' , 2018,12);

现在我想返回所有报价,无论是否有订单。所以我这样做:

SELECT * 
FROM Order1 O
RIGHT JOIN Quote Q ON O.[Month] = Q.[Month]
                   AND O.[Year1] = Q.[Year1]

返回我期望的确切输出:

|   Name |  Month |  Year1 | Name | Month | Year1 | Quotes |
|--------|--------|--------|------|-------|-------|--------|
|   Fred |    Apr |   2018 | Fred |   Apr |  2018 |      5 |
| (null) | (null) | (null) | Fred |   Jan |  2018 |      7 |
| (null) | (null) | (null) | Fred |   Feb |  2018 |     23 |
| (null) | (null) | (null) | Fred |   Mar |  2018 |     12 |

但是在我的真实例子中,我只得到四月份的比赛,无论我使用什么联赛,都是相同的结果。

| Name | Month | Year1 | Name | Month | Year1 | Quotes |
|------|-------|-------|------|-------|-------|--------|
| Fred |   Apr |  2018 | Fred |   Apr |  2018 |      5 |

我想无论我做什么,我都会通过匹配的行。

我想也许这可能与此类似:

SELECT * 
FROM Order1 O
RIGHT JOIN Quote Q ON O.[Month] = Q.[Month]
                   AND O.[Year1] = Q.[Year1]
                   AND Q.[Month] IS NULL

有人可以给我一些建议。

1 个答案:

答案 0 :(得分:1)

一种可能性...... 使用提供的数据,您可以在FROM:

中切换表的顺序
SELECT * 
FROM Quote O
RIGHT JOIN Order1 Q ON O.[Month] = Q.[Month]
                   AND O.[Year1] = Q.[Year1]

哪个产生:

PersonName  Month   Year1   Quotes  PersonName  Month   Year1
Fred        Apr     2018    5       Fred        Apr     2018

这意味着这些表实际上是相反的。