作者:fuotb_204 | 来源:互联网 | 2024-10-21 18:37
我需要将2个表的数据转移到新表中,这里是简化表.
表格1
user_id_slot_1 | user_id_slot_2 | some_column | some_column_2
表2
user_id_slot_1 | user_id_slot_2 | some_column | some_column_2
注意:
>表1和2中我需要传输/复制的数据几乎相同.
> user_id_slot_1和user_id_slot_2其中之一应为
空/空.
>列名与实际数据库不同.
新表
id | user_id | some_column | some_column_2
如何传输表1和2中的数据?
如何将列user_id_slot_1和user_id_slot_2合并为一个并将其传输到user_id.
更新:
我不需要传输/复制表1和2的ID,新表需要自动将其递增.
解决方法:
假设新表已经存在,则可以使用INSERT INTO … SELECT来移动数据.我在这里假设您不想在两个源表之间删除重复项时使用UNION ALL.
INSERT INTO new_table (`user_id`, `some_column`, `some_column_2`)
SELECT COALESCE(user_id_slot_1, user_id_slot_2),
some_column,
some_column2
FROM table1
UNION ALL
SELECT COALESCE(user_id_slot_1, user_id_slot_2),
some_column,
some_column2
FROM table2
注意:上面查询中的COALESCE(user_id_slot_1,user_id_slot_1)项如果不为NULL,则将选择user_id_slot_1,否则将选择user_id_slot_2.假设每个记录中只有一个为非NULL,这应该很好.
假设new_table表的id列设置为自动递增,则MySQL将为您分配这些值.您需要做的就是在new_table中省略id的值,MySQL将处理其余的值.
您应该使用以下内容创建新表:
CREATE TABLE new_table (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id INT NOT NULL,
some_column VARCHAR(50) NOT NULL,
some_column_2 VARCHAR(50) NOT NULL
)