Начал изучать SQL, разобрался с базовыми командами, но столкнулся с проблемой: есть таблица с тремя колонками id, amount и currency (id - Primary key). И я хочу удалить 3 строки, где currency будет 'EUR', а amount будет наименьшим. То есть мне нужно удалить наименьшие amount, где currency 'EUR'. Не могу понять как это записать в SQL.
Нужно в подзапросе получить эти минимальные значения, и из второй копии таблицы, связанной по нему, удалять. Альтернатива - две копии, связанные по неравенству, и удаление записей, не имеющих соответствия.
Вариант 1:
delete t1.*
from table t1, (select min(t2.amount) amount
from table t2
where t2.currency = 'EUR'
) t3
where t1.currency = 'EUR'
and t1.amount = t3.amount
Вариант 2:
delete t1.*
from table t1
left join table t2
on t1.currency = 'EUR'
and t2.currency = 'EUR'
and t1.amount > t2.amount
where t2.amount is null
PS. Вот только не понимаю, почему именно "3 строки".
Что Вы имели ввиду, когда писали "amount будет наименьшим"? Это можно понять и как "3 строки, где amount будет равен наименьшему значению в таблице", и как "3 строки с самыми маленькими значениями amount в таблице" (то есть эти значения меньше чем в других строках, но они могут быть разными). Один ответ Вам уже вроде бы дали. Он основан на первой трактовке вопроса, но он не учитывает количество строк = 3. Это можно исправить добавив LIMIT 3. Однако LIMIT нельзя использовать с многотабличным DELETE (когда в секции FROM перечислены несколько таблиц). Если переписать запрос с помощью подзапроса в секции WHERE, думаю LIMIT заработает. Но я всё же склоняюсь ко второй трактовке Вашего вопроса. В этом случае надо думать о сортировке по полю amount:
delete from t
where t.currency = 'EUR'
order by t.amount asc
limit 3;
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите какое экранирование сделать для полей "ФИО" "телефон" и "Описание"На данный момент у меня следующее
Всем доброго времени сутокНаписал метод обновление данных,но почему то работает ооооочень криво title = при отправке запроса меняет то 0,то...
На что ставят (VPS или что там) и на чём пишут сервера для Android-игр? Соединение держится между клиентом и сервером с помощью сокетов?