【问题标题】:select different columns based on outer join根据外连接选择不同的列
【发布时间】:2012-08-08 21:14:53
【问题描述】:

我有两个表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)。

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

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

或者还有其他更好的方法吗?

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

非常感谢

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    您正在寻找COALESCE:

    SELECT
        tableA.rowid,
        tableA.name,
        COALESCE(tableB.enabled, tableA.enabled) AS enabled
    FROM tableA 
    LEFT OUTER JOIN tableB
    ON tableA.rowid = tableB.rowid
    

    【讨论】:

      【解决方案2】:
      select tableA.rowid, tableA.name, ISNULL(tableB.enabled, tableA.enabled) as Enabled
      from tableA 
      left outer join
      tableB
      on tableA.rowid = tableB.rowid
      

      【讨论】:

        猜你喜欢
        • 2019-08-03
        • 2014-03-11
        • 2018-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多