0

我在两个表、作者和样式之间有关系。每个作者都与一种风格相关联,在特殊情况下作者没有风格(IS NULL)。

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

例如,查询:

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

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

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

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

4

4 回答 4

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
于 2008-12-23T12:35:26.083 回答
1

我认为如果你不能使用 LEFT JOIN,你应该使用 UNION。
查看来自 Coding Horror 的链接,它非常有趣。 SQL 连接的可视化解释

于 2008-12-23T12:45:21.757 回答
0
SELECT "authors"."id", "authors"."name", "styles"."name", "authors"."comments" FROM    "authors" , "styles" WHERE "authors"."style" = "styles"."id" OR "authors"."style" = null

你试过吗?

于 2008-12-23T12:35:37.643 回答
0

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

SELECT "authors"."id", "authors"."name", "styles"."name", "authors"."comments" 
FROM "authors" , "styles" 
WHERE "authors"."style" = "styles"."id" OR "authors"."style" IS NULL
于 2008-12-23T12:38:44.373 回答