Mysql

MySQL 使用新 ID 插入兩個表

  • February 10, 2013

我正在嘗試選擇數據庫中已經存在的數據,並使用表一中生成的 ID 將其插入到兩個表中。

table1包含配置選項,table2包含定價數據。Table2使用來自 的自動 ID table1

我有所有這些產品,Table1我必須在該表的另一個組中使用相同的配置選項,但 WHMCS 沒有配置選項的副本。

我正在考慮進入表並執行這樣的選擇查詢:

INSERT INTO tblproductconfigoptionssub 
   (
       id
       , configid
       , optionname
       , sortorder
       , hidden
   ) 
SELECT 
   NULL
   , 76
   , optionname
   , sortorder
   , hidden 
FROM tblproductconfigoptionssub 
WHERE configid = 41

這適用於第一個表中的數據,方法是從配置組 id 41 中選擇所有記錄並重新插入它們,但現在它們已連結到配置組 76。

表 2 包含定價數據,它有一個名為的列,該列relid連結到從上面的 tblproductconfigoptionssub 生成的 ID。

表 2 已經在其原始 ID 下為表 1 中的項目定價。必須複製 Table2 中的記錄,但使用上面查詢生成的新 ID。

如何修改上面的語句以將新數據連同價格一起插入到 Table2 中?

我真的不想為此做一個 PHP 腳本。但是,我認為我需要創建一個 MySQL 函式來從配置組 41 中選擇所有項目,然後將值儲存在變數中。然後插入到兩個表中。

INSERT有沒有辦法用語句來做到這一點?

查詢執行後,您將擁有一組複製的行(帶有configid=41)和一組相同的粘貼行(除了configid=76和 auto-created id)。

由於這些 id 事先不知道,因此您需要另一種方法來辨識配置表的行,例如唯一鍵(除了自動遞增的鍵),因此您可以將新創建的行與舊的。

例如,如果(configid, optionname)是唯一的,那麼以下將起作用:

INSERT INTO pricing
   ( relid, price, ... )          --- relid and all the other columns, 
                                  --- except any autoincrement you may have
SELECT pasted.id, p.price, ....    --- and the same columns here
FROM 
   pricing AS p
 JOIN
   tblproductconfigoptionssub AS copied
     ON  copied.id = p.relid
     AND copied.configid = 41 
 JOIN
   tblproductconfigoptionssub AS pasted
     ON  pasted.optioname = copied.optioname
     AND pasted.configid = 76 ;

引用自:https://dba.stackexchange.com/questions/24217