加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL在两个表中连接两个具有空值的表

发布时间:2020-12-12 07:04:48 所属栏目:MsSql教程 来源:网络整理
导读:我在加入两个表的内容时遇到了一些麻烦.这是目前的情况: 买 文章买了年 1 12400 2011 1 28000 2012 1 46351 2015年 出售 文章销售年份 1 6400 2011 1 12000 2013 1 60900 2014 期望的结果 文章买了卖年 1 12400 6400 2011 1 28000 NULL 2012 1 NULL 12000 20
我在加入两个表的内容时遇到了一些麻烦.这是目前的情况:


文章买了年
1 12400 2011
1 28000 2012
1 46351 2015年

出售
文章销售年份
1 6400 2011
1 12000 2013
1 60900 2014

期望的结果
文章买了卖年
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

这仅返回2011年的结果(两个值都存在).

使用包含所有文章的第三个表的另一个尝试返回了相同的错误结果,并且它有两年的列,这是不理想的:

SELECT art.article,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语句,但它们似乎都没有工作.
我怎样才能达到预期的效果?

解决方法

听起来你想要一个完整的外连接:
SELECT coalesce(b.article,s.article) as article,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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读