Select from same table as an Insert or Update

前端 未结 5 1759
走了就别回头了
走了就别回头了 2021-01-17 17:48

Clearly the following is incorrect.

INSERT INTO `aTable` (`A`,`B`) VALUES((SELECT MAX(`A`) FROM `aTable`)*2),\'name\');

I get the value:

5条回答
  •  终归单人心
    2021-01-17 18:33

    Actually, you can alias the table on the insert. I've seen this question all over the place, but no one seems to have tried that. Use a subquery to get the max from the table, but alias the table in the subquery.

    INSERT INTO tableA SET fieldA = (SELECT max(x.fieldA) FROM tableA x)+1;
    

    A more complex example, where you have a corresponding secondary key and might be inserting the FIRST record for the corresponding secondary key:

    INSERT INTO tableA SET secondaryKey = 123, fieldA = COALESCE((SELECT max(x.fieldA) FROM tableA x WHERE x.secondaryKey = 123)+1,1);
    

    By aliasing the table, it doesn't throw the error and seems to work. I just did this while coding something, although I can't see if there area any silly syntax errors above, I would try that type of syntax.

提交回复
热议问题