如何解决有没有办法在SQL上联接两个不在您索引行上的表而又没有空值
我在SQL中有两个类似于以下内容的表:
Code Symbol Value
1203 ABC 10.00
1208 XYZ 12.00
1222 null 9.00
1226 ABC 1.00
和
Symbol Date
ABC 2020-06-07
XYZ 2020-06-08
QRS 2020-06-10
目前,我正尝试如下加入他们
SELECT a.Code,a.Symbol,a.Value,b.Date
FROM table1 a
LEFT JOIN table2 b ON a.Symbol = b.Symbol
这将返回以下输出:
Code Symbol Value Date
1203 ABC 10.00 2020-06-07
1208 XYZ 12.00 2020-06-08
1226 ABC 1.00 2020-06-07
但是,我仍然希望保留初始表中的所有行,并像这样将缺少的值填写为null:
Code Symbol Value Date
1203 ABC 10.00 2020-06-07
1208 XYZ 12.00 2020-06-08
1222 null 9.00 null
1226 ABC 1.00 2020-06-07
我知道这可能很简单,但是我已经尝试过研究,并且我认为我患有脑部抽筋,因为我无法正确处理问题以找到所需的东西。
感谢您的帮助。
解决方法
编辑:我同意@Gordon Linoff,您的表可能是相反的顺序。翻转表格,或改用RIGHT JOIN
。
听起来像您想要LEFT (OUTER) JOIN
。有关一般费用,请参阅here。
WITH a AS (
SELECT *
FROM (VALUES (1203,'ABC',10.00),(1208,'XYZ',12.00),(1222,null,9.00),(1226,1.00)
) as a (code,symbol,value)
),b AS (
SELECT *
FROM (VALUES ('ABC','2020-06-07'::date),('XYZ','2020-06-08'::date),('QRS','2020-06-10'::date)
) as b (symbol,date)
)
SELECT code,a.symbol,value,date
FROM a LEFT JOIN b ON a.symbol = b.symbol
+----+------+-----+----------+
|code|symbol|value|date |
+----+------+-----+----------+
|1203|ABC |10 |2020-06-07|
|1208|XYZ |12 |2020-06-08|
|1222|NULL |9 |NULL |
|1226|ABC |1 |2020-06-07|
+----+------+-----+----------+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。