2014-02-12 79 views
0

在數據庫中,我有一個包含大量信息的表。我試圖做的是設定一個數字和數字相同的限制。我認爲我走在正確的軌道上,但我錯過了一些東西。任何人有想法?更新多行

UPDATE loc l 
SET l.limit = (SELECT (lo.factor*j.limit) 
       FROM (SELECT limit, num, fig FROM loc WHERE typ = 'WE') j, loc lo 
       WHERE lo.typ = 'TR' 
       AND lo.num = j.num  
       AND lo.fig = j.fig) 
WHERE l.typ = 'WE' 
+0

使用連接而不是子查詢 –

+0

不好與連接 – Demas

回答

0

你可以用join做你想做的。但是你正在採取相關的子查詢方法。

我懷疑問題是你的子查詢與外層查詢沒有關聯。您需要刪除的子查詢loc表:

UPDATE loc l 
    SET l.`limit` = (SELECT (lo.factor*j.`limit`) 
        FROM (SELECT `limit`, num, fig 
         FROM loc 
         WHERE typ = 'WE' 
         ) j 
        WHERE l.typ = 'TR' AND 
         l.num = j.num AND 
         l.fig = j.fig 
       ) 
    WHERE l.typ = 'WE'; 

此外,limit是一個保留字。你不應該把它用作列名。因爲你是,你需要把它反引號或雙引號。

+0

感謝但限制是表的名稱,而不是我的選擇,我試過這一個,但它給了我一個缺少的表達式錯誤。 – Demas

+0

不是我錯了,我打了'而不是',所以錯誤在我身上,謝謝這很好。 – Demas