#mysql #ms-access
#mysql #ms-access
Вопрос:
По сути, у меня есть следующее, вызываемое Table1
со столбцами OrderNum
, и Book
никогда не должно быть повторяющихся записей любого типа Book
для каждого OrderNum
, если есть необходимость идентифицировать и удалить.
Например:
OrderNum
1 должен быть Book1
указан только один раз, поэтому запрос должен идентифицировать другие 2, Book1
перечисленные для OrderNum
1, и удалить их.
OrderNum
4 должно быть Book2
указано только один раз, поэтому запрос должен идентифицировать другое, Book2
указанное для OrderNum
4, и удалить его.
После выполнения запроса таблица 1 должна выглядеть следующим образом:
Я работаю с запросами MS Access, но я ищу решение, которое могло бы работать и для запроса MySQL.
Комментарии:
1. Что случилось с порядком # 2? Похоже, здесь отсутствуют данные.
2. Как так? В заказе № 2 не указаны дубликаты книг, поэтому нет записей для удаления. То же самое касается заказа № 3.
Ответ №1:
Я не знаю, как сделать это изящно ни в MySQL, ни в Access, потому что в вашей таблице нет столбца первичного ключа, который он по праву должен иметь. При доступе вы можете попробовать создать новую таблицу, а затем заполнить ее с помощью следующего запроса:
INSERT INTO yourNewTable (OrderNum, Book)
SELECT DISTINCT OrderNum, Book
FROM yourTable;
Затем удалите yourTable
после того, как вы закончите с приведенным выше запросом.
Если бы у вас был столбец первичного ключа / автоматического увеличения в вашей таблице, скажем id
, тогда вы могли бы напрямую использовать следующий оператор удаления:
DELETE
FROM yourTable t1
WHERE EXISTS (SELECT 1 FROM yourTable t2
WHERE t2.OrderNum = t1.OrderNum AND
t2.Book = b1.Book AND
t2.id < t1.id);
Это оставило бы для каждой (OrderNum, Book)
комбинации единственную запись среди дубликатов, которая имеет наименьшее id
значение.