显然,以下内容不正确。
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,我的错误,请注意这就是为什么评论经常说^ 2,这是版本中的错误评论者阅读。
答案 0 :(得分:12)
尝试:
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)”
答案 1 :(得分:8)
实际上,您可以对插入的表进行别名。我到处都看到过这个问题,但似乎没人试过。使用子查询从表中获取最大值,但使用子查询中的表别名。
INSERT INTO tableA SET fieldA = (SELECT max(x.fieldA) FROM tableA x)+1;
一个更复杂的示例,其中您有相应的辅助密钥,可能正在插入相应辅助密钥的FIRST记录:
INSERT INTO tableA SET secondaryKey = 123, fieldA = COALESCE((SELECT max(x.fieldA) FROM tableA x WHERE x.secondaryKey = 123)+1,1);
通过对表进行别名,它不会抛出错误并且似乎有效。我只是在编写代码时这样做,虽然我无法看到上面是否存在任何愚蠢的语法错误,但我会尝试这种类型的语法。
答案 2 :(得分:5)
我认为INSERT ... SELECT不起作用?我在文档中看到了这个:
INSERT的目标表 语句可能出现在FROM中 SELECT部分的子句 查询。 (有些人不可能这样做 旧版本的MySQL。)在此 例如,MySQL创建了一个临时表 从SELECT和中保存行 然后将这些行插入到 目标表。
出于好奇,您使用的是哪个版本的MySQL?
答案 3 :(得分:1)
答案 4 :(得分:-1)
只要选择正确,您就可以执行此操作。