显然以下是不正确的.
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,这是评论者的版本中的错误读.
尝试:
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)"
实际上,您可以在插入上对表进行别名.我到处都看到过这个问题,但似乎没人试过.使用子查询从表中获取最大值,但使用子查询中的表作为别名.
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);
通过别名表,它不会抛出错误,似乎工作.我只是在编写代码时执行此操作,虽然我无法查看上面是否存在任何愚蠢的语法错误,但我会尝试这种类型的语法.
我认为INSERT ... SELECT不起作用?我在文档中看到了这个:
INSERT语句的目标表可能出现在查询的SELECT部分的FROM子句中.(这在某些旧版本的MySQL中是不可能的.)在这种情况下,MySQL创建一个临时表来保存SELECT中的行,然后将这些行插入到目标表中.
出于好奇,您使用的是哪个版本的MySQL?