[英]How do i insert in an insert command with mysql?
我有一個簡單的插入選擇, 它將_TABLE_B_數據插入_TABLE_A_新行
INSERT INTO _TABLE_A_(_USERNAME_,_ID_)
SELECT _USERNAME_,_ID_
FROM _TABLE_B_
我想插入一個名為每次我在_TABLE_A插入一行_TABLE_C_ _表中的一行,並在_TABLE_A_添加當前插入_TABLE_C_ ID。
我將嘗試以其他方式進行解釋:
INSERT INTO _TABLE_A_(_USERNAME_,_ID_,_FOREIGN_ID_)
SELECT B._USERNAME_,B._ID_,C._FOREIGN_ID_
FROM _TABLE_B_ AS B
LEFT JOIN _TABLE_C_ AS C
#Insert a row in _TABLE_C_ to retrieve _FOREIGN_ID_...
我正在搜索具有INSERT SELECT語句(如我的)的單個最小查詢,因為insert select可以循環,而我必須循環。
僅供參考:我處於存儲過程中。 我也將准備好的語句與動態數據一起使用,並且游標不適合動態數據選擇...
我將首先在_TABLE_C_中進行所有INSERT,然后將其加入INSERT _TABLE_A_中以獲取適當的外鍵。
如果那是不可能的,我將使用光標。
Cursor on _TABLE_B_ & Fetch
INSERT _TABLE_C_
INSERT _TABLE_A_ with Foreign_Id = SCOPE_IDENTITY()
Fetch next
我找到了解決方案。
例
BEGIN
DECLARE isDone INT DEFAULT 0;
DECLARE fetchedmemberWhoWillReceiveMailId int;
DECLARE cur1 CURSOR FOR SELECT id FROM memberWhoWillReceiveMail;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET isDone = 1;
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET @sexe = VAR_sexe;
SET @event = VAR_eventId;
SET @subject = VAR_subject;
SET @body = VAR_body;
SET @to = VAR_to;
SET @from = VAR_from;
SET @region = VAR_region;
SET @departement = VAR_departement;
SET @age = VAR_age;
SET @baseSqlStatement =' CREATE TEMPORARY TABLE memberWhoWillReceiveMail SELECT e.id FROM TABLE_A as e LEFT JOIN TABLE_B AS a on a.member_id = e.id';
SET @whereSqlStatement= 'WHERE e.is_visible = 1 AND e.member_group_id IN (10,11) ';
IF (@region!='') THEN
SET @whereSqlStatement= CONCAT(@whereSqlStatement,' AND region=',@region);
END IF;
IF (@event !=null ) THEN
SET @whereSqlStatement= CONCAT(@whereSqlStatement,' AND m.event_id !=' ,@eventId);
END IF;
IF (@sexe!=null ) THEN
SET @whereSqlStatement= CONCAT(@whereSqlStatement,' AND e.sexe=',@sexe);
END IF;
SET @baseSqlStatement = CONCAT(@baseSqlStatement,@whereSqlStatement);
START TRANSACTION;
PREPARE stmt1 FROM @baseSqlStatement;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
OPEN cur1;
FETCH cur1 INTO fetchedmemberWhoWillReceiveMailId;
WHILE NOT isDone DO
INSERT INTO conversation(created_at,updated_at)VALUES(now(),now());
INSERT INTO message(created_at,updated_at,from, to, uniqueID) VALUES(now(),now(),@from,fetchedmemberWhoWillReceiveMailId,LAST_INSERT_ID() );
FETCH cur1 INTO fetchedmemberWhoWillReceiveMailId; END WHILE; CLOSE cur1;
COMMIT;
DROP TEMPORARY TABLE IF EXISTS memberWhoWillReceiveMail;
END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.