我有两个表tableA和tableB,它们具有相同的结构:
rowid: big int
name:character variying
enabled: boolean
现在我在这两个表上进行了外连接
select tableA.rowid, tableA.name, tableB.enabled
from tableA
left outer join
tableB
on tableA.rowid = tableB.rowid
tableA包含的行,其enabled列全部为true,而tableB包含tableA中应该关闭的一些行(enalbed列为false)。
如果我使用上面的连接,它会将结果表中匹配行的启用字段设置为false,但不会将其余行设置为true。启用列只是空的(在tableB中找不到匹配的行)。
我的问题是,如果tableB中没有匹配的行,我有什么方法可以告诉外连接我想使用tableA.enabled,否则,使用tableB.enabled?
或者还有其他更好的方法吗?
我使用PostgreSQL。任何其他SQL类型的想法也是受欢迎的。
非常感谢
答案 0 :(得分:4)
您正在寻找COALESCE:
SELECT
tableA.rowid,
tableA.name,
COALESCE(tableB.enabled, tableA.enabled) AS enabled
FROM tableA
LEFT OUTER JOIN tableB
ON tableA.rowid = tableB.rowid
答案 1 :(得分:1)
select tableA.rowid, tableA.name, ISNULL(tableB.enabled, tableA.enabled) as Enabled
from tableA
left outer join
tableB
on tableA.rowid = tableB.rowid