2013-03-27 77 views
0

我將使用存儲在table_b中的變量更新table_a。但是當我嘗試更新與選擇查詢,我有錯誤,請幫助我。萬分感謝。使用mysql中的select進行更新

這2代表的結構:

CREATE TABLE IF NOT EXISTS `table_a` (
    `fk1` int(11) DEFAULT NULL, 
    `avg_100` int(11) DEFAULT NULL, 
    `avg_score` int(11) DEFAULT NULL, 
    `cvg_date` datetime DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 


CREATE TABLE IF NOT EXISTS `table_b` (
    `fk1` int(11) NOT NULL DEFAULT '0', 
    `avg_100` int(11) DEFAULT NULL, 
    `avg_score` int(11) DEFAULT NULL, 
    `cvg_date` int(11) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

,當我嘗試執行查詢

UPDATE table_a a LEFT JOIN (( 
     SELECT fk1, SUM(avg_100) as avg_100, SUM(avg_score) as avg_score, MAX(cvg_date) as cvg_date 
     FROM table_b 
      GROUP BY fk1 
) AS b1) AS b ON a.fk1= b.fk1 
SET 
    a.avg_score = b.avg_score, 
    a.avg_100 = b.avg_100, 
    a.cvg_date = b.cvg_date 

我得到一個錯誤:

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'b ON a.fk1= b.fk1 
SET 
    a.avg_score = b.avg_score, 
    a.avg_100 = b.avg_100, 
' at line 4 

回答

1

要設置別名「b」和「B1」被選擇返回的表。你只需要一個。試試這個查詢:

UPDATE table_a a 
LEFT JOIN ( 
    SELECT fk1, SUM(avg_100) as avg_100, SUM(avg_score) as avg_score, MAX(cvg_date) as cvg_date 
    FROM table_b GROUP BY fk1 
) AS b 
ON a.fk1= b.fk1 
SET 
a.avg_score = b.avg_score, 
a.avg_100 = b.avg_100, 
a.cvg_date = b.cvg_date 
+0

謝謝@Eddie你是對的。 – 2013-03-27 04:59:51

0

我認爲你有一個語法錯誤通過在左連接之後添加一個選擇。 我發現一個堆棧溢出後用更新,也許你可以使用爲例來重新安排你的查詢: UPDATE multiple tables in MySQL using LEFT JOIN

+0

解決了這個問題「並稱一個只選擇左側後加入」我認爲這是正確的,因爲我選擇結果保存爲表 – 2013-03-27 04:33:17

0

我使用ROWNUM

UPDATE TABLE1 set TABLE1.COLUMN1 = (select T2.COLUMN1 from TABLE1 AS T2 
where T2.PK = TABLE1.PK 
and rownum = 1)