在可空引用上选择

时间:2008-12-23 12:29:40

标签: postgresql select foreign-keys

我有两个表,作者和样式之间的关系。 每个作者都与一个样式相关联,特殊情况是作者没有样式(IS NULL)。

将引用设置为NULL没有问题,但是在执行查询以选择作者和样式时出现问题。

例如,查询:

SELECT "authors"."id", "authors"."name", "styles"."name", "authors"."comments" FROM 
"authors" , "styles" WHERE "authors"."style" = "styles"."id"

忽略具有NULL样式的作者(如预期的那样)。

我需要做一个select也列出具有NULL样式的作者,就像左连接一样(由于某些原因我不能使用LEFT JOIN)。

有一个不包含显式连接的解决方案?

4 个答案:

答案 0 :(得分:4)

最明显的解决方案是LEFT OUTER JOIN。

请参阅:http://www.postgresql.org/docs/8.1/static/tutorial-join.html

如果您不想使用显式连接,则应该能够使用UNION

SELECT "authors"."id", "authors"."name", "styles"."name", "authors"."comments" FROM 
"authors" , "styles" WHERE "authors"."style" = "styles"."id"
UNION
SELECT "authors"."id", "authors"."name", "", "authors"."comments" FROM 
"authors" WHERE "authors"."style" IS NULL

答案 1 :(得分:1)

我认为如果你不能使用LEFT JOIN,你应该使用UNION。
查看Coding Horror的链接,非常有趣。 A Visual Explanation of SQL Joins

答案 2 :(得分:0)

SELECT "authors"."id", "authors"."name", "styles"."name", "authors"."comments" FROM    "authors" , "styles" WHERE "authors"."style" = "styles"."id" OR "authors"."style" = null

你试过吗?

答案 3 :(得分:0)

根据我的理解,您只需要扩展查询以包含NULL:

SELECT "authors"."id", "authors"."name", "styles"."name", "authors"."comments" 
FROM "authors" , "styles" 
WHERE "authors"."style" = "styles"."id" OR "authors"."style" IS NULL