ВЫБРАТЬ на обнуляемую ссылку - PullRequest
0 голосов
/ 23 декабря 2008

У меня есть связь между двумя таблицами, авторами и стилями. Каждый автор связан со стилем, в особом случае, когда у автора нет стиля (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 голосов
/ 23 декабря 2008

Наиболее очевидным решением является ЛЕВОЕ НАРУЖНОЕ СОЕДИНЕНИЕ.

См .: 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 голос
/ 23 декабря 2008

Я думаю, что если вы не можете использовать LEFT JOIN, вы должны использовать UNION.
Просмотрите ссылку из Coding Horror, она довольно интересная. Визуальное объяснение соединений SQL

0 голосов
/ 23 декабря 2008

Насколько я понимаю, вам просто нужно расширить свой запрос, включив в него значение NULL:

SELECT "authors"."id", "authors"."name", "styles"."name", "authors"."comments" 
FROM "authors" , "styles" 
WHERE "authors"."style" = "styles"."id" OR "authors"."style" IS NULL
0 голосов
/ 23 декабря 2008
SELECT "authors"."id", "authors"."name", "styles"."name", "authors"."comments" FROM    "authors" , "styles" WHERE "authors"."style" = "styles"."id" OR "authors"."style" = null

Вы пробовали это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...