внутреннее соединение с макс не работает - PullRequest
1 голос
/ 12 июня 2011

У меня есть следующая таблица, и я пытаюсь увеличить значение столбца ref следующим запросом.

orderid name age address ref
1       A    22  a1      1
2       B    21  b1      0

update table1
set ref = 
'(SELECT (MAX(ref) + 1) AS max_ref FROM table1)'
where name= 'B'

Но вместо него всегда устанавливается значение 0, если 2.

Спасибо.

Ответы [ 3 ]

1 голос
/ 12 июня 2011

Согласно MySQL doc :

В настоящее время вы не можете обновить таблицу и выберите из той же таблицы в подзапрос.

Однако это легко обойти:

UPDATE table1
SET ref = (
    SELECT m.max_ref FROM (
        SELECT (max(ref) + 1) AS max_ref FROM table1) m)
WHERE name= 'B'
1 голос
/ 12 июня 2011

Похоже, вы устанавливаете целочисленный столбец ref в строку, содержащую инструкцию SQL:

set ref = '(SELECT (MAX(ref) + 1) AS max_ref FROM table1)'

Когда MySQL пытается преобразовать эту строку в целое число, оно заканчивается 0.

Правильный способ - опустить кавычки '', что ставит вас перед новой проблемой: MySQL не позволяет обновлять и выбирать из той же таблицы. Вы найдете решение для этого в обоих других ответах.

0 голосов
/ 12 июня 2011

Попробуйте:

UPDATE `table1`
SET `ref` = (
        SELECT `cur_ref` FROM(
                SELECT MAX(`ref`)+1 `cur_ref` FROM `table1`
        ) `calc_table`
) WHERE `name` = 'B'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...