#mysql #sql #sql-delete
#mysql #sql #sql-удалить
Вопрос:
Предварительная информация
Я вызвал таблицу Test
:
-- Table Creation
CREATE TABLE Test(
id integer,
title varchar (100)
);
-- Insertion
INSERT INTO Test Values
(1, "Hi"),
(2, 'Hello'),
(2, "Hellew"),
(3, "World"),
(3,"Wordy");
Тестовая таблица
| Id | title |
|----|--------|
| 1 | Hi |
| 2 | Hello |
| 2 | Hellew |
| 3 | World |
| 3 | Wordy |
Процесс
Я хочу, чтобы delete
идентификатор дубликатов основывался на приоритете
Проблема
Это ошибка вывода, которую я получаю
ERROR 1093 (HY000) at line 5: You can't specify target table 'Test' for update in FROM clause
Требуется ВЫВОД
| Id | title |
|----|--------|
| 1 | Hi |
| 2 | Hello |
| 3 | World |
Спасибо,
Комментарии:
1. Какой код вызывает ошибку?
2. Если у вас нет ПЕРВИЧНОГО КЛЮЧА, то у вас на самом деле нет таблицы.
3. @Strawberry итак, как вы думаете, если я отредактирую свою таблицу, чтобы иметь первичный ключ
Not NULL
, это решит мою проблему из-за отсутствия значений дубликатов, иDelete
оператор будет работать?4. Нет заметного «приоритета», ошибка, по-видимому, связана с инструкцией UPDATE, а не с УДАЛЕНИЕМ, пожалуйста, опубликуйте код, который у вас есть до сих пор
5. Может быть, я немного старомоден, но я думаю, что ПЕРВИЧНЫЙ КЛЮЧ является необходимым условием для того, чтобы задать вопрос о запросах в реляционных базах данных
Ответ №1:
Вы четко не указали, что здесь является «приоритетом«. Но, глядя на пример вывода, я предполагаю, что приоритетом является сохранение тех строк, которые больше, чем другие с аналогичным идентификатором. Вот мой код:
delete a.* from Test a join Test b
on a.id = b.id where a.title < b.title;
select * from Test;
Ссылка
Комментарии:
1. что вы имеете в виду
a
илиb
?2. это псевдоним, который я присвоил рассматриваемой таблице. Поскольку здесь мы объединяем таблицы самостоятельно, нам нужно дать разные имена. Очень простая концепция базы данных. И если мой ответ решил вашу проблему, пожалуйста, отметьте его как правильный ответ. Спасибо
3. да, это работает. можете ли вы объяснить, что
a
иb
многое другое … итак, я могу вернуться к этому вопросу в качестве ссылки. Пожалуйста, включите свое объяснение в свой ответ4. Вы можете прочитать об псевдонимах здесь: techonthenet.com/mysql/alias.php . Читайте под заголовком: ПСЕВДОНИМ таблицы
5. под приоритетом я подразумевал 1- е вхождение в таблицу. MySQL принимает это как ссылку, поэтому, если он находит другое значение после него, он удаляет его с помощью
your query
. Пример того, что, когда запрос находит 2 ключа в таблице, он принимает 1-е вхождение , а затем удаляет все, что приходит после того, как с тем жеid
.