SQL通过内部联接插入

Lue*_*ang 2 mysql sql inner-join

我要进行插入查询,该查询具有对Users表的内部联接。

这些表的示例如下所示:

使用者:

id | fullName | preferredName | email              | mobile   | password
1  | Pan Lim  |  Lim          | limpan45@gmail.com | 64557812 | passone
2  | Gong My  |  Gong         | gong45@gmail.com   | 61345671 | passtwo
Run Code Online (Sandbox Code Playgroud)

命令:

id | userid(Foreign key of "id" from Users | timestamp
1  |               1                       | 2016-06-10 11:45:31
Run Code Online (Sandbox Code Playgroud)

我正在尝试插入与仅从“用户”表中了解用户ID有关的订单。它显示如下:

命令:

id | userid(Foreign key of "id" from Users | timestamp
1  |               1                       | 2016-06-10 11:45:31
2  |               2                       | 2016-08-14 12:45:31
Run Code Online (Sandbox Code Playgroud)

但是,当我对SQL查询进行测试时,此查询有错误。

INSERT INTO Orders (id, userid, timestamp) 
SELECT Orders.id, Orders.userid, Orders.timestamp FROM Users INNER JOIN Orders ON  Orders.id = Users.id
Run Code Online (Sandbox Code Playgroud)

Mr *_*ach 8

如果 Orders.Id 是唯一的,您的 SQL 查询将失败。您正在尝试将一条或多条现有记录插入到 Orders 表中,因此它将与 Id 重复。我不确定您想要实现什么目标,但这应该可行:

INSERT INTO Orders ( userid, timestamp) 
SELECT Orders.userid, Orders.timestamp FROM Users INNER JOIN Orders ON  Orders.id = Users.id
Run Code Online (Sandbox Code Playgroud)

编辑:Orders.Id 应该是订单中记录的唯一 ID,Users.Id 应该是用户表中记录的唯一 ID?在这种情况下,您无法加入这两个。


VNT*_*VNT 8

如果您的ID 不是在“订单”表中自动递增

INSERT INTO orders ( id,userid, timestamp) 
SELECT o.userid , o.timestamp FROM users u INNER JOIN orders o ON  o.userid = u.id
Run Code Online (Sandbox Code Playgroud)

如果您的ID是“ 订单”表中的自动递增

INSERT INTO orders ( userid, timestamp) 
SELECT o.userid , o.timestamp FROM users u INNER JOIN orders o ON  o.userid = u.id
Run Code Online (Sandbox Code Playgroud)