从与插入或更新相同的表中选择
Posted
技术标签:
【中文标题】从与插入或更新相同的表中选择【英文标题】:Select from same table as an Insert or Update 【发布时间】:2010-09-17 08:07:57 【问题描述】:显然以下是不正确的。
INSERT INTO `aTable` (`A`,`B`) VALUES((SELECT MAX(`A`) FROM `aTable`)*2),'name');
我得到了价值:
SQL查询:
INSERT INTO `aTable` (`A`, `B` )
VALUES
(
(
SELECT MAX(`A`)
FROM `aTable`
) *2
, 'name'
)
mysql 说:
1093 - 您不能在 FROM 子句中指定目标表“aTable”进行更新
所以,我正在尝试制作一个位图表格,每一行对应一个位,并且有一个'map'值。
要插入表格,我不想做两个查询,我想做一个。 我该怎么做?
没有人评论这个,但是由于我是在做位图,应该是*2而不是^2,我的错误,请注意这就是为什么cmets经常说^2,这是版本的错误评论者阅读。
【问题讨论】:
【参考方案1】:其实你可以在insert上给表起别名。我到处都看到过这个问题,但似乎没有人尝试过。使用子查询从表中获取最大值,但在子查询中为表设置别名。
INSERT INTO tableA SET fieldA = (SELECT max(x.fieldA) FROM tableA x)+1;
一个更复杂的例子,你有一个相应的辅助键,并且可能为相应的辅助键插入第一条记录:
INSERT INTO tableA SET secondaryKey = 123, fieldA = COALESCE((SELECT max(x.fieldA) FROM tableA x WHERE x.secondaryKey = 123)+1,1);
通过别名表,它不会引发错误并且似乎可以工作。我只是在编写代码时这样做了,虽然我看不到上面是否存在任何愚蠢的语法错误,但我会尝试这种类型的语法。
【讨论】:
【参考方案2】:尝试:
insert into aTable select max(a)^2, 'name' from aTable;
或
insert into aTable select max(a)^2, 'name' from aTable group by B;
如果您需要加入,可以这样做:
insert into aTable select max(a)^2, 'name' from aTable, bTable;
我的“服务器版本”是“5.0.51b-community-nt MySQL Community Edition (GPL)”
【讨论】:
【参考方案3】:我认为INSERT ... SELECT 不起作用?我在它的文档中看到了这一点:
INSERT 的目标表 语句可能出现在 FROM SELECT 部分的子句 询问。 (这在某些情况下是不可能的 旧版本的 MySQL。)在这个 情况下,MySQL 创建一个临时表 保存来自 SELECT 的行和 然后将这些行插入 目标表。
出于好奇,您使用的是哪个版本的 MySQL?
【讨论】:
下一个建议是,如果您使用的是旧版本的 MySQL,请使用临时表,这是当前版本的 MySQL 隐式执行的操作。 ..它应该可以工作 # 服务器版本:5.0.45-Debian_1ubuntu3.3-log # 协议版本:10【参考方案4】:只要选择正确,您就可以执行此操作。
【讨论】:
【参考方案5】:我认为您需要删除“VALUES”,并有一个有效的选择语句。
see this link
我不是特别喜欢 mySQL,我主要使用 MSSQL。但是,如果您正确格式化 select 语句,它应该可以工作。
【讨论】:
不,我正在尝试从与插入相同的表中进行选择,而 MySQL 不喜欢这样。抱歉,我第一次没有正确输入查询,但是选择仍然正确。 人力资源管理。好的,mySQL 有用户定义的函数吗?所以你可以创建一个返回当前“MAX(A
)”的函数并在你的语句中使用它?
它确实(存储过程),但我不确定它是否会让你仍然这样做。值得一试
我正在看这些 cmets,试试看,如果它有效,请告诉我。如果没有,我会在午餐时在我的本地 mySQL 上设置一些类似的表,并尝试看看我是否可以得到一些工作,如果没有更好的 mySQL 知识的人还没有得到答案。
人力资源部。由于无法使用 mySQL,我无法提出令人满意的解决方案。在我看来,mySQL 缺乏 MSSQL 所具有的某些功能,但这可能是我在该 dbms 方面的经验不足。以上是关于从与插入或更新相同的表中选择的主要内容,如果未能解决你的问题,请参考以下文章
如何通过mysql或python将数据插入到另一个具有相同id的表中