我在加入两个表的内容时遇到了一些麻烦.这是目前的情况:
买
Article Bought Year
1 12400 2011
1 28000 2012
1 46351 2015
出售
Article Sold Year
1 6400 2011
1 12000 2013
1 60900 2014
期望的结果
Article Bought Sold Year
1 12400 6400 2011
1 28000 NULL 2012
1 NULL 12000 2013
1 NULL 60900 2014
1 46351 NULL 2015
我尝试了以下方法来达到预期的效果:
SELECT b.article, b.bought, s.sold, b.year
FROM Bought AS b
LEFT JOIN Sold as s ON s.article = b.article AND s.year = b.year
WHERE b.article = '1'
ORDER BY b.year
Run Code Online (Sandbox Code Playgroud)
这仅返回2011年的结果(两个值都存在).
使用包含所有文章的第三个表的另一个尝试返回了相同的错误结果,并且它有两年的列,这是不理想的:
SELECT art.article, b.bought, s.sold, b.year, s.year
FROM articles AS art
LEFT OUTER JOIN bought AS b ON art.article = b.article
LEFT OUTER JOIN Sold AS s ON art.article = s.article
AND (b.year = s.year OR b.year IS NULL OR s.year IS NULL)
WHERE art.article = '1'
Run Code Online (Sandbox Code Playgroud)
我尝试过使用最后一个SQL语句的不同类型的连接,但它们似乎都不起作用.我怎样才能达到预期的效果?
Gor*_*off 12
听起来你想要一个full outer join:
SELECT coalesce(b.article, s.article) as article, b.bought, s.sold,
coalesce(b.year, s.year) as year
FROM Bought b FULL OUTER JOIN
Sold s
ON s.article = b.article AND s.year = b.year
WHERE (b.article = '1' OR s.article = '1')
ORDER BY year
Run Code Online (Sandbox Code Playgroud)
你应该使用full outer join:
select coalesce(b.article, s.article)
, b.bought
, s.sold
, coalesce (b.year, s.year) as year
from Bought b
full join Sold s on s.article = b.article
and s.year = b.year
where coalesce(b.article, s.article) = '1'
order by year
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8243 次 |
| 最近记录: |