【发布时间】:2015-07-13 13:05:44
【问题描述】:
我在连接两个表的内容时遇到了一些问题。这是目前的情况:
已购买
文章 已购买 年份
1 12400 2011
1 28000 2012
1 46351 2015
已售出
文章 已售出 年份
1 6400 2011
1 12000 2013
1 60900 2014
想要的结果
文章 购买 已售出 年份
1 12400 6400 kbd>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
这仅返回 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'
我尝试在最后一条 SQL 语句中使用不同类型的连接,但它们似乎都不起作用。 我怎样才能达到预期的效果?
【问题讨论】:
-
你第一次查询的WHERE中有v.artk,但是没有v表...
-
您是否想出通过
<kbd>格式化您的查询结果,或者这已经在这里完成了? -
@PeterLang 在此线程中发现它是第三个答案:meta.stackexchange.com/questions/73566/…
-
@MrBunni:很有趣,谢谢!不过对齐列看起来很麻烦...
标签: sql postgresql