2017-04-06 38 views
0

我對這個說法得到SQL Error: ORA-01779: cannot modify a column which maps to a non key-preserved table錯誤:UPDATE內選擇提供了一個錯誤

UPDATE 
(
SELECT CELLS.NUM, UND.CLIENT_PARAMS 
FROM CELLS 
LEFT OUTER JOIN UND 
ON CELLS.UND_ID = UND.ID 
WHERE CELLS.SASE = 1 
) t 
SET t.CLIENT_PARAMS = 'test'; 

我想更新CLIENT_PARAMS領域的所有行,它可以選擇退貨。

+0

我猜你是從細胞獲得多行的同一行,因爲它加入不止一次UND更多。但是,如果您要添加一些DDL和一些示例數據,我們可以提供更多幫助。 – unleashed

+0

你需要哪一種?更新所有出現的UND,或者更新UND.ID與SASE爲1的CELLS表上的UND_ID相匹配的所有事件?或者也許完全是其他的東西? – BriteSponge

+0

基本上UPDATE語句是 - UPDATE a_table SET some_values WHERE some_records_qualified_by_something。你的陳述沒有說明你想要更新什麼,以及哪些行不清楚。 – BriteSponge

回答

0

最直截了當的(儘管可能不是最有效的)的方式來更新在一個表中的行,其通過標識列直接對應的行與另一個表中是使用WHERE table1.column IN (SELECT id FROM table2 WHERE ...)

在這種情況下:

UPDATE UND 
SET client_params = 'test' 
WHERE id IN 
    (SELECT und_id 
    FROM CELLS 
    WHERE SASE=1) 
0

嘗試此

UPDATE und u 
SET client_params = 'test' 
WHERE EXISTS 
     (SELECT 1 
     FROM cells c 
     WHERE C.SASE = 1 
     AND c.und_id = u.id) 
+0

我有完全相同的錯誤 – Pablo

+0

可能的替代方案:'UPDATE和SET client_params ='test'WHERE id IN(SELECT und_id FROM cells WHERE sase = 1)''。免責聲明:我現在沒有辦法測試這個,所以我不能100%確定它會起作用(否則我會將它作爲答案發布)。 – Quietust

+0

@Pablo - 只是可以肯定的。 UND是一張桌子?正確嗎?這不是基於多個表格的視圖嗎? – BriteSponge

相關問題