我有一些愚蠢的錯誤。我想用這個存儲過程語句更新一些表。MySQL更新聲明失敗的子查詢
邏輯是:更新表x其中最初來自select語句的行。
此存儲過程總是失敗:顯示
DELIMITER $$
USE `sre`$$
DROP PROCEDURE IF EXISTS `sp_generateGraphicsAcc`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_generateGraphicsAcc`(IN sa INT, IN thn VARCHAR(12), IN acc VARCHAR(12))
BEGIN
/*tmp_totalpesan.type_m = 1*/
/*first, update tmp_totalpesan to empty row(s)*/
UPDATE tmp_totalpesan SET totalpesan = '' WHERE type_m = 1;
/*second, update tmp_totalpesan from select statement.*/
UPDATE tmp_totalpesan tt
SET (tt.totalpesan =
SELECT COUNT(mp.quantity)
FROM mt_pesanan mp
WHERE (mp.ms_salesarea_idms_salesarea = sa)
AND (mp.tahun = thn)
AND (check_aksesoris_barang(mp.ms_langganan_idms_kodebarang) = acc)
AND tt.bulan = alter_monthname(MONTHNAME(mp.tgl_pesan))
GROUP BY mp.bulan)
WHERE type_m = 1;
END$$
DELIMITER ;
錯誤了
Error Code: 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 '(tt.totalpesan = SELECT COUNT(mp.quantity) FROM mt_pesanan mp WH' at line 8
你能看出問題出在哪裏? 謝謝。
UPDATE
這個存儲過程想達到的目標是:
讓說,我有1臺是事務表,我想生成特定參數的結果。
從SELECT唧唧歪歪使用此查詢的結果:
SELECT COUNT(mp.quantity), alter_monthname(MONTHNAME(tgl_pesan))
FROM mt_pesanan mp
WHERE (mp.ms_salesarea_idms_salesarea = sa)
AND (mp.tahun = thn)
AND (check_aksesoris_barang(mp.ms_langganan_idms_kodebarang) = acc)
GROUP BY mp.bulan;
結果是
month - value
JANUARY - 1566
FEBRUARY - 800
等等...(12行)
我想要的是從結果中的select語句更新值(1566,800等)的第二個表。
相同的列名稱是與另一個表對應的select語句的月份。
如何實現這個?
實際問題
你應該沒有'()'左右'SET'子句中的'column = value'。從'SET(tt.totalpesan = SELECT ....)'中刪除'()' –
與mp有什麼關係? – Strawberry
@MichaelBerkowski是的,它顯示了錯誤。我已經做到了。 – randytan