我有两个表,作者和样式之间的关系。 每个作者都与一个样式相关联,特殊情况是作者没有样式(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)。
有一个不包含显式连接的解决方案?
答案 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