Php 将数据从一个表复制到另一个没有ID的表

Php 将数据从一个表复制到另一个没有ID的表,php,mysql,Php,Mysql,我使用MySQL语句将数据从一个表复制到另一个表 $sql2 = "INSERT one SELECT id, user_id, name FROM two WHERE user_id='1'"; 两个表使用相同的列:id、user\u id和name 我想将数据从表two复制到表one。当我执行脚本时,我可以看到表two中的所有数据都被复制到表one。还有列id 我想将表one中的id保留为唯一值。我不想将id从表two复制到one。我只想复制列user\u id和name,并想自动增加表o

我使用MySQL语句将数据从一个表复制到另一个表

$sql2 = "INSERT one SELECT id, user_id, name FROM two WHERE user_id='1'";
两个表使用相同的列:
id
user\u id
name

我想将数据从表
two
复制到表
one
。当我执行脚本时,我可以看到表
two
中的所有数据都被复制到表
one
。还有列
id

我想将表
one
中的
id
保留为唯一值。我不想将
id
从表
two
复制到
one
。我只想复制列
user\u id
name
,并想自动增加表
one
中的
id

当我在没有
id
的情况下执行脚本时,我得到一个错误,即
one
two
中的列不相同


有人知道我如何解决此问题并在没有
id
列的情况下复制数据吗您可以使用以下语法进行查询:

INSERT INTO `one` (`user_id`, `name`) SELECT `user_id`, `name` FROM `two` WHERE `user_id` = 1  

SELECT
语句中的
WHERE
子句匹配的行将复制到表
one

由于
SELECT
INSERT
语句中都省略了
id
字段,因此创建到
one
中的行将根据自动增量值获得
id


我假设
user\u id
是一个数字列(类型为
int
bigint
…),因此我删除了值
1
周围的单引号


如果字段包含字符串(例如,
char
varchar
…)类型的列)

,则应使用引号。

'。。。值或插入。。。SELECT,表中每一列的值都必须由值列表或SELECT语句提供。“-
insert into one(user\u id,name)选择user\u id,name from two where…
like so?
user\u id='1'
如果列数据类型为INT,则也是一般MySQL规则,将其作为INT而不是字符串查询。如果将其作为字符串查询,MySQL的自动广播可能会把事情搞砸,如果anny,优化器可能无法使用索引。并且只有当id为自动增量值时,它才起作用,这是由OP
user\u id='1'
规定的,如果列数据类型为INT,则也是通用的MySQL规则,将其作为INT而不是字符串查询。如果你把它作为字符串查询,MySQL的自动播放会把事情搞砸,如果anny的话,优化器可能无法使用索引。我怀疑这是否真的有效。但我没试过。select语句周围的括号看起来有点奇怪me@RaymondNijland你说得对。但是OP查询将
1
置于单引号之间。我们从OP提供的信息中不知道
user\u id
列类型。“我们从OP提供的信息中不知道user\u id列类型”这就是为什么我说“如果列数据类型是INT,则将其作为INT而不是字符串查询”@Psi select语句周围的圆括号是可选的,但我发现它们使查询更具可读性。它的工作原理是:看到了吗