2012-07-12 30 views
0

我已經在表中創建了一列,從中我想用其他select語句檢索的數據填充表。無法使用select語句更新表中的行

這是我試圖用它來填充一個列聲明:當我運行該語句在Oracle中它顯示了這個錯誤

update cc_file 
set sd_file_name = (select c1.name sd_file_name 
        from cc_file f, cvs3 c1 
        where f.sd_file_id = c1.file_id 
        and (c1.file_id, c1.type) in (select file_id, 
                  max(type) 
                from cvs3 
                where type1='PP' 
                and type2='XHMTML' 
                group by file_id) 

ORA-01427: single-row subquery returns more than one row

請有人可以讓我知道我是怎麼可以做到這一點,以便更新列。

感謝

+0

選擇c1.name sd_file_name有一些問題,你有沒有'任何表c1'對象請檢查 – Jalpesh 2012-07-12 10:09:07

+0

的問題是,你的SELECT語句返回多個行,但在這樣的任務中只能有一個值。您需要修復select語句,以便它返回您想要使用的一個文件名。 另外,這種形式的update語句會將xml_file_name設置爲表中所有行的相同值,是您想要的嗎?我懷疑你真正想要的是爲每行獲取與其現有的xml_file_id對應的xml_file_name,是嗎? – Barmar 2012-07-12 10:10:30

+0

我已經更新了c1對象。是的@Barmar你是對的,這是我正在嘗試做的。謝謝 – Sam 2012-07-12 10:14:06

回答

1

試試這個

update cc_file 
    set xml_file_name = (select c1.name sd_file_name 
         from cvs3 c 
         where f.sd_file_id = cc_file.file_id and 
           (c.file_id, c.type) in (select file_id, max(type) 
                 from cvs3 
                 where type1='PP' and 
                   type2='XHMTML' 
                 group by file_id)) 
+0

感謝鮑勃的形成:) – Madhivanan 2012-07-12 12:26:04

+0

我試過這個它沒有工作說同樣的錯誤,謝謝 – Sam 2012-07-12 12:44:30

+0

現在沒事了,我在最後添加了語句將其鏈接到其他表,並添加了不同,它的工作表示感謝。 – Sam 2012-07-12 12:55:59