【问题标题】:SQL Insert Into with Inner JoinSQL插入到内部联接
【发布时间】:2017-06-10 04:25:34
【问题描述】:

我想进行插入查询,该查询与用户表有一个内部连接。

表格的例子是这样的:

用户:

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

我正在尝试插入与仅知道用户表中的用户 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

但是当我测试我的 SQL 查询时,这个查询有错误。

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

【问题讨论】:

  • “一些”错误是什么?
  • 我认为你应该打开 Orders.userid = Users.id
  • 对因无法命名的神秘错误而失败的插入查询进行故障排除的好方法是确保选择查询自行运行。
  • 不确定它们是否是虚构的,但我们可以在您的问题中看到 Lim 和 Gong 的电子邮件地址和电话号码。如果是真的,最好混淆它们。

标签: mysql sql inner-join


【解决方案1】:

如果您的 id 在 Orders 表中不是自动递增

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

如果您的 id 在 Orders 表中是自动递增

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

【讨论】:

    【解决方案2】:

    如果 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 应该是orders 中记录的唯一ID,而Users.Id 应该是user 表中记录的唯一ID?在这种情况下,你不能加入这两个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-28
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 2012-10-04
      • 2014-07-10
      相关资源
      最近更新 更多