В настоящее время я работаю над проектом для класса, который требует от нас создания внешнего интерфейса для базы данных MySQL. В целях обучения мы используем только одну таблицу пациентов без автоматического увеличения для уникального идентификатора (Patient_id). Мы должны добавить новых пациентов, и для этого мы планировали иметь интерфейс С# для создания значения Patient_id равным 0, а затем иметь другой оператор для обновления этого значения до максимального значения Patient_id + 1. Я знаю, что это не практично/безопасное решение, так как оно может вызвать ошибки, но так как оно только для тестирования и не связано с другими таблицами, я не слишком обеспокоен.
Я попытался использовать базовые запросы для решения этой проблемы, установив Patient_ID = Max (Patient_ID) + 1, но это, похоже, не работает.
UPDATE patient
set patient_id = (select max(patient_id) + 1 from patient)
where patient_id = 0;
Выходные данные этого запроса говорят, что я не могу указать целевую таблицу "терпеливый" для обновления в предложении FROM, поэтому я немного запутался, почему это невозможно.
Вы не можете использовать одну и ту же таблицу для выбора и обновления, но вы используете подзапрос для построения таблицы stmp и избегаете проблемы:
UPDATE patient
SET patient_id = (SELECT t.max_id
FROM
(SELECT MAX(patient_id) + 1 FROM patient)) t
WHERE patient_id = 0;