如何连接两个表并将第二个表中的null替换为零

时间:2014-11-15 10:33:13

标签: sql

enter image description here

当我尝试将表A加入B时,我只得到两行 - 我没有得到' 55A'在表B中缺少的ProdID列中。如何确保我为缺少的ProdID获得三行零价格

Query used:
select A.orderNo, B.Price
from A,B
where A.ProdID=B.ProdIDl

4 个答案:

答案 0 :(得分:3)

首先,您应该遵循一个简单的规则:永远不要在join子句中使用逗号。显式join语法更强大。而且,它已经存在了很长很长时间。

您想要的joinleft join。无论第二个表中是否存在匹配项,它都会将所有行保留在第一个表中。当没有匹配时,第二个表中的列被赋予NULL个值。要将NULL转换为0,您可以使用ANSI标准函数coalesce()

select A.orderNo, coalesce(B.Price, 0) as Price
from A left join
     B
     on A.ProdID = B.ProdID;

答案 1 :(得分:1)

只需使用LEFT / RIGHT加入

之后,您可以使用COALESCE(B.Price,0) Price这样的{{1}}

答案 2 :(得分:1)

SELECT A.*, B.*
FROM A
     LEFT JOIN B
              ON A.ProdID=B.ProdID

如果表A中的元素在表B中没有匹配,则此查询将显示它们,但在右侧设置NULL,如下所示:

enter image description here

答案 3 :(得分:0)

您可以加入这些表格( tableA tableB ):

SELECT A.orderNo, B.Price
FROM tableA A
LEFT JOIN tableB B
ON A.ProdID = B.ProdID
WHERE 1