2015-10-01 123 views
0

我有以下兩個表ABMySQL - 更新字段插入查詢從選擇查詢

我想插入從表A記錄到表B但隨着新orderNum價值和新的記錄被加入到表B時。

我有以下查詢但沒有按預期工作。

INSERT INTO B (refId, userId, orderNum) 
SELECT id, '1', (SELECT count(refId) + 1 FROM B WHERE userId = 1) as orderNum 
FROM A 
WHERE is_mendatory IS NOT NULL 
ORDER BY is_mendatory ASC 

讓說,我有3條記錄存在於表B和使用SELECT查詢我要插入5條記錄。所以那些新的5條記錄應該插入4,5,6,7,8的orderNum。

但目前它只設置了4個爲orderNum爲新的5條記錄。

任何人都可以提出一些建議嗎?

編輯:

我正在上4 orderNum領域新的5個記錄。

+0

你在這個查詢中得到了什麼輸出? –

+0

@YoYo,我將在orderNum字段中爲新的5條記錄添加4。 – NullPointer

回答

0

創建一個插入觸發器之前,對每個INSERT的B中的行進行計數,將該數字存儲在一個變量中,使用行數更新表格。

DELIMITER // 

CREATE TRIGGER orderNum_after_insert 
BEFORE INSERT 
    ON B FOR EACH ROW 
BEGIN 

SET @orderNo:=(SELECT COUNT(*) FROM B); 
SET [email protected]; 

END; // 

DELIMITER ; 
+0

我不能用上面寫的查詢做一些修改嗎? – NullPointer

+0

@NullPointer問題出在你的查詢中,即查詢是一個事務,所以你的計數只會在插入之前對行進行計數,你希望在每一行插入後計數。 – Mihai