2012-01-16 27 views
8

2つのクエリを実行して、奇妙な結果が得られます。私はなぜこれが起こっているのか知りたいです。
は今照会:矛盾したOracleクエリの結果

SELECT * FROM TABLE_A a, TABLE_B b, TABLE_C c 
    WHERE a.a = b.a (+) 
    AND b.c = c.c 
    AND a.a = 123; 

結果は空です。

SELECT COUNT(*) FROM TABLE_A a, TABLE_B b, TABLE_C c 
    WHERE a.a = b.a (+) 
    AND b.c = c.c 
    AND a.a = 123; 

結果は、それが本当に違う返される値と同じクエリで1

です。
表Aは、aの化合物。表= B.A.ような行が含まれていない「」フィールド= 123
表B持つ行が含まれてい

方法は何か1は、同じクエリに対して返されないことができますか?


更新:

私はそれそれはOK作品

SELECT COUNT(*) FROM TABLE_A a, TABLE_B b, TABLE_C c 
    WHERE a.a = b.a (+) 
    AND b.c = c.c (+) 
    AND a.a = 123; 

このようにします。

+16

改革は、ANSI-92構文( 'LEFT JOIN'、など)を使用して、そしてあなたのクエリが、それを試してみてください。それは20歳です、私はそれが寝る時間があったと思う! – MatBailie

+1

'TABLE_C'はどうですか?それには何がありますか? – gdoron

+2

@Dems。ちょっと、たまに1回以上+1することができたらいいのに... –

答えて

1

おそらくあなたは、インデックスまたはテーブルのデータと一致していない外部キー制約を持っています。これらの2つのクエリは異なるインデックスを使用する可能性が高いため、矛盾したデータが返されます。あなたは一時的にconstrataintsを

を無効にしている、または、彼らは最初に(ENABLE NOVALIDATE)有効となっていることを検証せずにそれらを設定しますか?

はインデックスとドロップを再構築し、それはあなたの問題を修正するかどうかを確認するために、外部キー制約を再作成してください。

関連する問題