2012-05-11 30 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

相關問題