[英]Get the inserted records in last query/Get changed rows count (MySQL)
我目前正在將舊的數據庫結構遷移到新的結構。 我正在創建一個 SQL 腳本(因為我可能需要不止一次地執行此操作)並且我卡在了我希望執行的某個操作上。
所以這個腳本的相關表/字段:
狀態-> 舊表,我將在其中獲取標簽記錄
自由職業者-> 舊表
標簽-> 新表,用於存儲標簽(自由職業者可以有多個標簽,標簽可以有多個自由職業者)
free_labels -> 新表,交叉引用標簽和自由職業者
所以,我想要的是:
default_name IS NULL
狀態復制到標簽。default_name IS NULL
狀態中刪除每條記錄對於前 2 點,我提出了查詢:
INSERT INTO labels(name,color_code,idcreator)
SELECT state AS name,color_code,2 AS idcreator FROM states
where default_name IS NULL;
DELETE FROM states WHERE default_name IS NULL;
我已將 idcreator 強制為 2,這是有意為之,我知道這可能看起來很奇怪。
對於第三點,我想使用類似的東西:
INSERT INTO free_labels(idlabel,idfreelancer)
VALUES
((SELECT LAST_INSERT_ID() FROM labels),
(SELECT f.idfreelancer FROM freelancers f, states s,
WHERE f.idstate=s.id AND s.default_name IS NULL))
注意:我還沒有嘗試過這個查詢,所以我什至不知道我是否可以用雙SELECT
做一個INSERT INTO
。
並在從狀態中刪除記錄之前使用此查詢。 但是這個查詢對我來說有兩個問題。
LAST_INSERT_ID()
只會讓我獲得最后插入的記錄。我對如何執行此操作有點迷茫,我認為這可以通過從查詢中獲取更改記錄的數量來完成,但我不知道是否可以通過 SQL(如果需要,我也可以使用 PHP,不過,我寧願不)。
我考慮過的另一件事是,也許我可以使用JOIN
執行INSERT
,因此我會同時在labels
和free_labels
中插入記錄。 但同樣,我不知道這對 SQL 是否可行,甚至是否能解決我的問題。
我真的很想避免手動遷移這些記錄......
任何幫助/建議將不勝感激!
因此,首先,您創建一個多列的新標簽表:
CREATE TABLE labels (
idlabel int PRIMARY KEY AUTO-INCREMENT,
#Some other columns....
old_id int
);
然后你將你的數據插入到這個表中,就像你所做的加上 old_id (並刪除行):
INSERT INTO labels(name,color_code,idcreator,old_id)
SELECT state AS name,color_code,2 AS idcreator, id AS old_id FROM states
where default_name IS NULL;
DELETE FROM states WHERE default_name IS NULL;
您現在可以將您的自由職業者 ID 與 free_labels 表中的舊 stateid 進行映射:
INSERT INTO free_labels (idlabels, idfreelancers)
SELECT labels.idlabel, freelancers.idfreelancer
FROM labels
JOIN freelancers
ON labels.old_id = freelancers.idstate;
您現在需要做的就是將自由職業者的 idstate 設置為 1(注意不要有 id=1 的狀態或者說檢查 free_labels 的狀態,否則將其設置為 NULL 或 0),刪除標簽中的列並就是這樣 :
UPDATE freelancers SET idstate = 1 WHERE idfreelancer IN (SELECT idfreelancer FROM free_labels);
ALTER TABLE labels DROP COLUMN old_id;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.