Oracle

更新具有重複 id 的表,同時避免“單行子查詢返回多於一行”

  • July 26, 2018

我目前正在製作 SQL,它將根據我公司另一個表中的數據更新 1 個表中的數據

update table1
set column1 = (SELECT color
               FROM table2
               Where table1.id = table2.id)

我的目標是讓table1’scolumn 1包含來自 的顏色table 2,但id它不是唯一的,而是公司的 cvr,因此它們出現多次給我錯誤"single-row subquery returns more than one row"。但是,重複項可以有不同的顏色,這讓我不確定如何解決這個問題,有什麼建議嗎?

此外,雖然重複項可能是不同的顏色,但在 99% 的情況下它們不是,所以如果第一個是不可能的,我有辦法更新,所以所有重複項都有相同的顏色嗎?

如錯誤消息所示,該set column1 =子句需要單個值。聽起來您有數據模型問題,但如果您需要快速修復,可以修改您的選擇查詢以返回單個值;如果有多個與您的 where 子句匹配,則以下是唯一的colorfrom :table2``color

update table1
set column1 = (SELECT distinct color
               FROM table2
               Where table1.id = table2.id 
               and rownum = 1
             )

如果我有更多時間,我會添加另一個級別以找到最常見的匹配顏色,並返回第一行。

更新子查詢以返回第一個不同的顏色 - 感謝 RDFozz 指出這一點。

引用自:https://dba.stackexchange.com/questions/213282