0

我有两个表 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 包含启用的列全部为 true 的行,而 tableB 包含 tableA 中应关闭的一些行(启用的列为 false)。

如果我使用上面的连接,它会将结果表中匹配行的启用字段设置为false,但不会将其余行设置为true。启用的列只是空的(在 tableB 中找不到匹配的行)。

我的问题是,如果 tableB 中没有匹配的行,有什么方法可以告诉外连接我想使用 tableA.enabled,否则,使用 tableB.enabled?

或者有没有其他更好的方法来做到这一点?

我为此使用 PostgreSQL。也欢迎任何其他 SQL 类型的想法。

非常感谢

4

2 回答 2

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
于 2012-08-12T08:29:05.177 回答
1
select tableA.rowid, tableA.name, ISNULL(tableB.enabled, tableA.enabled) as Enabled
from tableA 
left outer join
tableB
on tableA.rowid = tableB.rowid
于 2012-08-12T08:29:52.923 回答