我试图在一个真实的例子中使用正确的连接语法,遗憾的是我无法展示,但我已经尽可能准确地演示了它。
我有这些表格:
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
有人可以给我一些建议。
答案 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
这意味着这些表实际上是相反的。