2009-07-30 67 views
0
SELECT (b.descr || ' - ' || c.descr) description 
FROM table1 a 
    INNER JOIN table2 b ON a.account = b.account 
    INNER JOIN table3 c ON a.product = c.product 
WHERE a.descr = ' ' ; 

如何使用上述子查詢更新表?其迴歸多行近8000行?如果您有任何解決方案,請與我分享?帶有子查詢的更新表返回多個行

+0

請發表創建表腳本 - 它爲我們節省了所有時間。 – Liao 2009-07-30 07:52:19

+0

Prem,你似乎有*四個問題,包括這個問題,你面對的是*同樣的問題*。 1)http://stackoverflow.com/questions/1199733/getting-extra-rows-after-joing-the-3-tables-using-left-join 2)http://stackoverflow.com/questions/ 1198183/update-a-table-using-the-fields-of-the-other-two-table-please-help-me-in-this 3)http://stackoverflow.com/questions/1204563/updating- row-with-subquery-returning-multiple-rows – Liao 2009-07-30 08:02:24

+0

此外,請花些時間閱讀StackOverflow FAQ。 (3條評論 - 我知道 - 下次更好!) – Liao 2009-07-30 08:04:55

回答

1

我不明白你到底想要做什麼,但你可以在一個子查詢語句中使用子查詢:

UPDATE table1 a SET a.descr = (
    SELECT MAX(b.descr || ' - ' || c.descr) 
    FROM table2 b, table3 c 
    WHERE b.account = a.account AND c.product = a.product 
) 
WHERE a.descr = ' ' 

的MAX()將只選擇一個數值爲您服務。如果你想自己選擇它,要麼進一步限制子查詢

1

在兩個Oracle & SQL Sever中,如果子查詢返回多於1行,數據庫將報告錯誤。在你的情況下,如果子查詢結果值是相同的,只需使用MAX()或MIN()函數讓DB選擇一個值。

0

嘗試:

UPDATE a SET descr = (b.descr || ' - ' || c.descr) 
FROM table1 a 
    INNER JOIN table2 b ON a.account = b.account 
    INNER JOIN table3 c ON a.product = c.product 
WHERE a.descr = ' ' ; 

在有多個行,表1將最終看到的最後一個。

Rob