gpt4 book ai didi

MySQL : add data from another database, 从特定行开始,user_id 为主,需要插入从 20 开始递增的数字

转载 作者:行者123 更新时间:2023-11-29 10:08:31 26 4
gpt4 key购买 nike

我有一个包含 19 行的用户表(第一行是 admin)。我需要添加更多内容,因此我有另一个数据库,其中的表有超过 1,400,000 个用户。

我的表有一个“user_id”作为主键,INT(11),没有自动增量。我需要从第 20 行开始添加用户,并且仅添加“first_name”、“last_name”和“email”。

我的第一次尝试:

插入 mydatabase.users(名字、姓氏、电子邮件)从 anotherdatabase.users 中选择名字、姓氏、电子邮件

这给我带来了“字段'user_id'没有默认值”

我理解这是因为 user_id 是主键并且不能为空。所以,再说一遍,它是 int(11),非自增。

所以我想添加 20,21,22,23 等等以及其他数据。我搜索了大约 5 个小时,似乎找不到任何我能理解的内容。

提前谢谢您。

最佳答案

要获取从 20 开始的数字:

INSERT INTO mydatabase.users (user_id, first_name, last_name, email) 
SELECT 19+row_number() over (),
first_name,
last_name,
email
FROM anotherdatabase.users

19+row_number() 超过 ()
'row_number()' = 其分区内的当前行数(Mysql 文档)'over()' - 定义无条件分区;所以实际上整个表都重​​要

两者的详细信息可以在MySQL Window Function concepts and syntax下找到
19+ - ...

或者 - 如果 MySQL 版本 < 8.0:

INSERT INTO mydatabase.users (user_id, first_name, last_name, email) 
SELECT (select 20+count(*)
from anotherdatabase.users u1 where u1.id < u.id) as id,
first_name,
last_name,
email
FROM anotherdatabase.users u

这确实假设您在另一个表上也有一个 user_id。内部选择仅计算原始数据库中有多少条记录的 id 小于此时返回的记录(并添加 20 以使编号从 20 开始)。

第三个选项(不依赖于 user_id 是否存在):

INSERT INTO mydatabase.users (user_id, first_name, last_name, email) 
SELECT ( @row_num:=@row_num+1 AS user_id,
first_name,
last_name,
email
FROM anotherdatabase.users u,
(SELECT @row_num:=19) var;

我不太喜欢这个,因为它涉及创建变量来跟踪行号。

关于MySQL : add data from another database, 从特定行开始,user_id 为主,需要插入从 20 开始递增的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51436129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com