0

私は2つのテーブル、作者とスタイルの間に関係があります。すべての作成者はスタイルに関連付けられていますが、作成者にスタイルがない(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

最も明白な解決策は、LEFTOUTERJOINです。

参照: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を使うべきだと思います。
CodingHorrorからのリンクを確認してください。かなり興味深いです。 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 に答える