h00h00l00 Ответов: 1

Подзапрос Sql (select+update)


Мы хотим изменить возрастное значение 9-х данных среди 100 данных в разделе "клиент"
таблица 19.

Могу ли я сделать следующие две строки запроса в одну строку с подзапросом?

выберите * из клиентского лимита 9, 1

обновление набора клиентов Возраст = 19 лет

Что я уже пробовал:

обновление набора клиентов Возраст=19 где ???? in (select *from customer limit 9, 1)

David_Wimbley

update customer set age=19 where ???? in (select *from customer limit 9, 1)
это общая идея, но в этой таблице должен быть столбец ID или какой-то уникальный идентификатор, который позволяет вам указать таблицу. Может быть, его Select Id FROM Customer или Select CustomerId From Customer но именно так вы и сделаете этот запрос.

Учитывая, что у нас нет доступа к вашему серверу, вашей таблице БД, и мы не можем видеть схему...это примерно так же хорошо, как и получается.

1 Ответов

Рейтинг:
0

OriginalGriff

Проблема с вашим запросом в его нынешнем виде заключается в том, что он не гарантирует возврата каких - либо конкретных результатов: если вы не укажете предложение ORDER BY в своем запросе SELECT, SQL может возвращать строки в любом порядке, который он считает нужным, а это означает, что два последовательных выбора могут не возвращать одни и те же результаты.
Вот почему таблицы обычно имеют столбец ID той или иной формы (часто INT IDENTITY или поле UNIQUEIDENTIFIER), так что вы можете абсолютно точно указать, какая строка вас интересует.
В вашем случае вы пытаетесь установить возраст конкретного человека и предполагаете, что, поскольку они в настоящее время находятся в девятой строке таблицы, они всегда будут там. Даже не обращая внимания на то, что вы не указываете какой-либо заказ, это небезопасно: что произойдет, если кто-то умрет (или клиент разорится), и в результате вы удалите его строку? Если это до девятого, то ваше обновление попадает не к тому человеку. Если это после, вы должны проверить, чтобы убедиться, что это после!

Поэтому не делайте этого так: найдите идентификатор строки (или добавьте столбец в свою таблицу, довольно часто бывает несколько клиентов с одинаковым именем, но разными идентификаторами клиентов) и используйте его в предложении WHERE вашей команды UPDATE.


h00h00l00

Спасибо за ответ.