- PR -

【ORACLE】FULL JOINで取得される結果が正しくない。

1
投稿者投稿内容
こたつ
会議室デビュー日: 2008/01/15
投稿数: 11
投稿日時: 2008-01-15 13:00
こんにちは、

ORACLE9.2.0.1.0においてFULL OUTER JOINで困っています。

DUALテーブルで作った文字列のDUMMYテーブルをUNIONさせ、
これをFULL OUTER JOINさせています。(下記のSQLを参照)
このSQLを実行すると不要行が取得されてしまいます。(下記の実行結果を参照)
また、FULL OUTER JOINの前と後を入れ替えると実行結果が異なります。

同様のテストを実際のテーブルで行った所、以下の結果とは違い想定通りの結果が取得できました。(下記の想定結果を参照)


文字列で作った仮テーブルでは、なぜうまくいかないのでしょうか?

---------------------------------------------------------
[SQL]
select S.FLG,K.FLG from
(
(select '1' AS FLG from dual)
union
(select '3' AS FLG from dual)
union
(select '4' AS FLG from dual)
) K
FULL OUTER JOIN
(
(select '1' AS FLG from dual)
union
(select '2' AS FLG from dual)
) S
ON
S.FLG = K.FLG
---------------------------------------------------------
[実行結果]
FLG FLG
―――――
1 1
4
3
1     ←ここがおかしい
2
---------------------------------------------------------
[想定結果]
FLG FLG
―――――
1 1
4
3
2
----------------------------------------------------------
こたつ
会議室デビュー日: 2008/01/15
投稿数: 11
投稿日時: 2008-01-17 01:04
自己レスですが、
FULL OUTER JOINで不具合があると少し聞いたのですが、
この不具合含めご存知の方いらっしゃいませんか?
mito
ベテラン
会議室デビュー日: 2002/05/17
投稿数: 50
投稿日時: 2008-01-17 11:11
Oracle9.2.0.1はFull Outer Joinに限らずANSI準拠のSQLでたくさんの障害が発生してます。
サポート契約を締結しているなら最新パッチをダウンロードして当ててください。
またサポート契約済みならOiSCにログインして検索するとたくさんヒットします。
残念ながら公開区分が契約顧客のみなので、ここでは何もお知らせできませんが。

サポート契約を結んでいない場合やパッチを適用できない場合は、ANSI準拠のSQLは使わない方がいいと思います。昔ながらの外部結合(+)を使って書けませんか?
こたつ
会議室デビュー日: 2008/01/15
投稿数: 11
投稿日時: 2008-01-18 00:47
ご返信ありがとうございます。
そうですか、やはり不具合が多いんですよね。
サポート契約は顧客が持っておりまして、そう簡単には検索はできそうにありません。
ANSI準拠のSQLを使わずに構築する様検討してみます。
ただでさえ長いSQLが更に長くなってしまいそうです・・・。
1

スキルアップ/キャリアアップ(JOB@IT)