【问题标题】:Trouble with MAX(col)+1 INSERT into same MySQL tableMAX(col)+1 INSERT 到同一个 MySQL 表的问题
【发布时间】:2012-11-05 13:13:01
【问题描述】:

我需要在同一个表中创建两个在插入时创建唯一值的 id 列。由于 MySQL 只允许一列自动递增,因此我需要对另一列执行 max(id)+1 之类的操作。

这是我期望的 SQL:

INSERT INTO invoices (invoiceid)
VALUES ((SELECT MAX(invoiceid)+1 FROM invoices))

select 语句独立工作,但在我的 INSERT 中是不允许的。我收到错误消息:您无法在 FROM 子句中指定目标表“发票”进行更新

【问题讨论】:

标签: mysql


【解决方案1】:

您想使用INSERT INTO .... SELECT FROM 而不是INSERT INTO...VALUES()

INSERT INTO invoices (invoiceid)
SELECT MAX(invoiceid)+1 
FROM invoices

我的问题是为什么不使用AUTO INCREMENT 字段来生成invoiceid 值?这就是它的用途,那么您在插入数据时不必创建它。

【讨论】:

  • 还是不行。 MySQL 不允许您从要插入的表中进行选择。
  • @a_horse_with_no_name 看到这个演示 - 它正在使用 sql fiddle -- sqlfiddle.com/#!2/776f5/1
  • 很有趣,谢谢。那么这显然不被视为子选择。
  • 成功了!谢谢你。我不能使用自动递增的原因是因为我需要行 ID 自动递增。我的应用程序的行 id 和 invoiceid 必须是独立的。
猜你喜欢
  • 2010-12-07
  • 2012-05-07
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 2010-11-26
  • 2023-03-26
  • 2011-11-20
相关资源
最近更新 更多