2012-05-11 5 views
0

OracleとSQL Server 2008の両方でうまく動作する次のクエリはありますが、PostgreSQLでは動作しません。クエリは、指定された条件に一致するレコードの数を返すことを意図しています。誰かがこれの理由を説明することができ、また、このクエリが期待される結果を生み出すためにどのように修正できるかについての解決法を提供することができます。式として使用されるサブクエリによって複数の行が返される

問合せ:

select count(*) 
from tma_notices 
where TNOT_NOTICE_TYPE ='0400' 
and TNOT_NOTICE_STATUS = 'OK' 
and tnot_notice_id >= 
    (
     select NOTICE_NUM_AT_MIDNIGHT 
     from RWOL_COUNTER_QUERY_TYPE 
     where QUERY_TYPE = 'START_NOTICES_TODAY' 
     and USER_NAME = 'PUBLIC' 
    ) 

UPDATE:このエラーは、PostgreSQLデータベースにおける不測の重複レコードによって引き起こされました。重複がどこから来たのかを調査する必要があります。

答えて

3

サブクエリが一連の行を返す可能性があり、条件がtnot_notice_id >=であることは、一連の行と比較して単一の値ではなく、有効でないことは明らかです。

どこの条件を満たすユニークなレコードが存在することは確かですか?

あなたはその行動を避けたい場合は、私はあなたがtnot_notice_id >= ALL (subquery)

+0

奇妙な話を使用することをお勧め私はこのコードの参照が実際にこの問題の原因となったレコードが重複していることを確認し、表しています。これは、データベースのクローン作成中に発生したはずです。私はさらに調査しなければならないでしょうが、あなたの答えに感謝します。 – CSharpened

+2

@CSharpened:少なくともOracleでは、サブクエリが複数の行を返した場合、元のクエリも失敗したと思います。 –

+0

@a_horse_with_no_name:私は全く同意します – DonCallisto

関連する問題