Как удалить обратные данные из моей таблицы

#sql

#sql

Вопрос:

Я новичок в SQL и пытаюсь его изучить. У меня есть таблица, такая как (name_1, name_2, room) В моей таблице много дубликатов, которые я пытаюсь устранить (name_1, name_2, room) amp; (name_2, name_1, room) является дубликатом для меня

У меня есть что-то вроде этого

Джон Роберт C21
Мэри Джо C22
Джо Мэри C22

как я могу превратить его в

Джон Роберт C21
Мэри Джо C22

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

1. Какую базу данных вы используете? И версия?

Ответ №1:

Мне нужно было вставить serial, уникальный идентификатор (id), чтобы заставить его работать, и изменить запрос:

 DELETE FROM tabl                                                 
WHERE id = (
  SELECT t1.id FROM tabl t1, tabl t2 WHERE t1.name_1 = t2.name_2
  AND t1.name_2 = t2.name_1
  AND t1.room = t2.room
  AND t1.name_1 > t2.name_1);
  

Определите для себя, как вам нравится упорядочивать столбцы. В будущем я бы просто упорядочил name (1,2) в алфавитном порядке.

Поэтому после удаления дубликатов я бы обновил все строки, где name_2 < name_1, чтобы предотвратить дублирование в будущем.

Может быть, более подходящей была бы другая структура таблицы? Всегда ли есть два имени?

Если у вас просто есть tbl:= (имя, номер), вы могли бы

 John   C21
Robert C21
Mary   C22
Joe    C22
  

Проблема не возникнет.

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

1. спасибо за вашу отметку времени, я сделал то же самое, но продолжаю получать сообщение об ошибке ОТ PublicationListNoDup t1, PublicationListNoDup t2

2. @user996554 — Вам нужно сообщить нам, какую СУБД вы используете.

3. @user996554: а) Я не Марк. б) Я предполагаю, что «решение» не работает, и нам нужен уникальный индекс для каждой строки здесь — по крайней мере, это упростило бы задачу.