我需要将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,新表需要auto increment
它。
答案 0 :(得分:2)
这是你想要的吗?
create table3 as
select id, coalesce(user_id_slot_1, user_id_slot_2) as user_id,
some_column, some_column_2
from table1
union all
select id, coalesce(user_id_slot_1, user_id_slot_2) as user_id,
some_column, some_column_2
from table2;
答案 1 :(得分:2)
假设新表已存在,您可以使用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)
字词会选择user_id_slot_1
,如果不是NULL
,则会选择user_id_slot_2
。假设每个记录中只有一个非NULL
,这应该没问题。
假设new_table
表的id
列设置为自动递增,那么MySQL将处理为您分配这些值。您需要做的只是省略 id
中new_table
的值,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
)