假设我有表a(具有列a1)和b(具有列b1和b2),然后执行左外连接。
假设b2的默认值为100,我想得到结果。
在这种简单的情况下,我可以通过查看输出中b1是否为空来手动进行。一般来说,这是最好的选择,还是有更标准和更简洁的方法?
SELECT *
FROM a LEFT OUTER JOIN b
ON a.a1 = b.b1
当a的值没有与b1匹配的值时,b1和b2将为NULL。
我能够提供一个默认值给b2吗?而不是NULL。注意,这里COALESCE不能使用,因为我不希望默认值覆盖b2中可能存在的NULL,只有在b1存在与a1匹配的值时才会使用默认值。
也就是说,对于a和b:
CREATE TABLE a (a1)
AS VALUES (1),
(2),
(3) ;
CREATE TABLE b (b1,b2)
AS VALUES (1, 10),
(3, null) ;
a1 b1 | b2
--- --------
1 1 | 10
2 3 | NULL
3
假设b2的默认值为100,我想得到结果。
a1 | b1 | b2
---------------
1 | 1 | 10
2 | NULL | 100
3 | 3 | NULL
在这种简单的情况下,我可以通过查看输出中b1是否为空来手动进行。一般来说,这是最好的选择,还是有更标准和更简洁的方法?
JOIN
条件或WHERE
条件不是立即可见的,但这并不是提出的初始问题的一部分——就生成的输出而言,它符合OP的要求,并避免了在b中有一行与a中的行匹配,但目标列中有一个NULL
时填充NULL
的可能性。 - mpag