【问题标题】:Select from table with optional values从带有可选值的表中选择
【发布时间】:2016-02-23 10:17:07
【问题描述】:

我有一个带有两个表的 PostgreSQL:Person 和 Address。

person表有一个外键引用Address表,但是这个字段是可选的(默认为NULL),所以“Person”不需要有“Address”。

我想(通过 SELECT 查询)获取 Person 的所有注册表,无论它们是否有地址。如何在单个查询中完成?

【问题讨论】:

  • SELECT * FROM Person p LEFT JOIN Address a ON p.<col_name> = a.<col_name> 当你在第二个表中没有对应的值时使用OUTER JOIN

标签: sql database postgresql select


【解决方案1】:

您想使用 LEFT JOIN,它返回第一个表中的所有行,无论在连接表中是否找到匹配行。

另见:http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

SELECT *
    FROM Person p
        LEFT JOIN Address a
            ON p.Address_ID = a.Address_ID

【讨论】:

  • 谢谢两位 ^^。我曾经在 WHERE 子句中手动进行连接,但我没有意识到要使用它。
  • @malkomich 你提到的隐式连接语法不是ANSI标准,应该避免。
【解决方案2】:

尝试使用左连接,如下所示:

select * from table1 left join table2 on table1.id = table2.id

【讨论】:

    猜你喜欢
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多