Ошибка MySQL — удаление дубликатов строк с приоритетом

#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;
  

Ссылка

MySQL: ПСЕВДОНИМЫ

Комментарии:

1. что вы имеете в виду a или b ?

2. это псевдоним, который я присвоил рассматриваемой таблице. Поскольку здесь мы объединяем таблицы самостоятельно, нам нужно дать разные имена. Очень простая концепция базы данных. И если мой ответ решил вашу проблему, пожалуйста, отметьте его как правильный ответ. Спасибо

3. да, это работает. можете ли вы объяснить, что a и b многое другое … итак, я могу вернуться к этому вопросу в качестве ссылки. Пожалуйста, включите свое объяснение в свой ответ

4. Вы можете прочитать об псевдонимах здесь: techonthenet.com/mysql/alias.php . Читайте под заголовком: ПСЕВДОНИМ таблицы

5. под приоритетом я подразумевал 1- е вхождение в таблицу. MySQL принимает это как ссылку, поэтому, если он находит другое значение после него, он удаляет его с помощью your query . Пример того, что, когда запрос находит 2 ключа в таблице, он принимает 1-е вхождение , а затем удаляет все, что приходит после того, как с тем же id .