2013-01-17 54 views
0
update COLORS 
set COLORS.AR = 'RED' 
where COLORS.GCRS = 'FIRST' 
and (case when max(NEWAPP."AGE") > 60 
and count(NEWAPP."AGE") > 0) 

我得到一個錯誤,指出「組的功能在這裏不允許」更新是根據是否存在另一個表的記錄,是表> 60

有誰知道我能做些什麼來防止這種錯誤?

標題非常說,我可以關於目標的一切。

+0

'NEWAPP',我想是另一張桌子。 「NEWAPP」表和「AR」表之間是否存在某種關係?或者你真的只關心'NEWAPP'表中有'AGE'大於60的行嗎?通常情況下,您需要進行某種連接,以確定是否在'NEWAPP'中存在與'AR'行相關的行,並且具有特定的值。 –

+0

我真正關心的是NEWAPP中是否有任何記錄。「AGE」的值超過60 – Deprecated

+0

好的。 'colors.ar'是表的名字嗎?還是表格中的一列?你使用它作爲兩者(你正在更新名爲'colors.ar'的表格並設置一個名爲'colors.ar'的列)。這是不可能的 - 任何一個或其他必須是不正確的。 –

回答

1

如果真的有表

UPDATE colors 
    SET colors.ar = 'RED' 
WHERE colors.gcrs = 'FIRST' 
    AND EXISTS(SELECT 1 
       FROM newapp 
       WHERE age > 60) 

這將是非常不尋常的,但是,在一個適當的數據模型有一個情況下,你想要做一個不相關的子查詢像這樣沒有任何關係。通常情況下,會有一些列將colors表與newapp表相關聯,並且您需要在該關係的EXISTS子查詢中添加一個謂詞。

+0

這很有效,謝謝。我知道我正在使用的桌子很糟糕。部分原因是我實際上首先編寫此查詢。我得到「組函數」錯誤,因爲我試圖在同一個where子句中同時使用count和max嗎? – Deprecated

+0

@ user1821973-你得到'ORA-00934'是因爲你有一個聚合函數作爲不允許的謂詞。但即使沒有這種情況,由於'boolean'在SQL中不是一個有效的數據類型(假設這是一個錯誤,因爲你的'CASE'語句格式錯誤(沒有'then','else'或'end'),你會收到一個錯誤你希望'case'語句返回一個布爾值),並且因爲你試圖引用一個你沒有從中選擇的表(除了已更正的表的名稱的問題)。 –

相關問題