簡體   English   中英

MySQL插入選擇聯接

[英]MySQL INSERT INTO SELECT JOIN

我正在嘗試將舊的MySQL基礎修改為新的-我希望更好。 所以我有一個問題,因為我自己無法解決:

我有一張有5列的舊表:

*table_old*
id | name_1 | name_2 | name_3 | role 
 1 |    aaa |    bbb |    ccc |    g 
 2 |    aaa |    ccc |    ddd |    f 
 3 |    bbb |    aaa |    ddd |    g 

等等。

我制作了一個新表來存儲具有2列的名稱值,它看起來像這樣:

*table_name*
id | name 
 1 |  aaa
 2 |  bbb
 3 |  ccc
 4 |  ddd

因為我正在使用它的角色來命名新表(舊表的最后一列),所以我可以創建具有4列的新表:

*table_g*
id | name_1 | name_2 | name_3
 1 |    aaa |    bbb |    ccc
 2 |    bbb |    aaa |    ddd

*table_f*
id | name_1 | name_2 | name_3
 1 |    aaa |    ccc |    ddd

另外,由於名稱可能很長,我希望使用表2中的id值代替名稱-我想得到類似的東西:

*table_g*
id | id_1 | id_2 | id_3
 1 |    1 |    2 |    3
 2 |    2 |    1 |    4

*table_f*
id | id_1 | id_2 | id_3
1  |    1 |    3 |    4

我將列名從* name_1 *更改為* id_1 *等。

現在,我正在尋求幫助。 我正在嘗試使用類似的東西:

INSERT INTO `table_g`(`id_1`, `id_2`, `id_3`)
SELECT `table_name`.`id`,`table_name`.`id`,`table_name`.`id`
FROM `table_name` 
  RIGHT JOIN `table_old` ON `table_name`.`name` = `table_old`.`name_1`
  RIGHT JOIN `table_old` ON `table_name`.`name` = `table_old`.`name_2`
  RIGHT JOIN `table_old` ON `table_name`.`name` = `table_old`.`name_3`
WHERE `table_old`.`role` = 'g';

但這是行不通的...如果可以的話請幫忙:/

INSERT INTO `table_g`(`id_1`, `id_2`, `id_3`)
SELECT t1.`id`, t2.`id`, t3.`id`
FROM `table_name` tn
  RIGHT JOIN `table_old` t1 ON tn.`name` = t1.`name_1` AND t1.`role` = 'g'
  RIGHT JOIN `table_old` t2 ON tn.`name` = t2.`name_2` AND t2.`role` = 'g'
  RIGHT JOIN `table_old` t3 ON tn.`name` = t3.`name_3` AND t3.`role` = 'g'

乍一看,您的選擇含糊不清,因此至少您應該嘗試使用上面的代碼發生什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM