根据外部联接选择不同的列

时间:2012-08-12 08:25:34

标签: sql postgresql

我有两个表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类型的想法也是受欢迎的。

非常感谢

2 个答案:

答案 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