SQL插入到内部联接

时间:2017-06-10 04:25:35

标签: 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

订单:

id | userid(Foreign key of "id" from Users | timestamp
1  |               1                       | 2016-06-10 11:45:31

我正在尝试插入与仅知道Users表中的用户标识相关的订单。它显示如下:

订单:

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

但是当我测试我的SQL查询时,它在此查询中有错误。

INSERT INTO Orders (id, userid, timestamp) 
SELECT Orders.id, Orders.userid, Orders.timestamp FROM Users INNER JOIN Orders ON  Orders.id = Users.id

2 个答案:

答案 0 :(得分:3)

如果您的ID在订单表中非自动递增

INSERT INTO orders ( id,userid, timestamp) 
SELECT o.userid , o.timestamp FROM users u INNER JOIN orders o ON  o.userid = u.id

如果您的ID在订单表中自动递增

INSERT INTO orders ( userid, timestamp) 
SELECT o.userid , o.timestamp FROM users u INNER JOIN orders o ON  o.userid = u.id

答案 1 :(得分:1)

如果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

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