#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: а) Я не Марк. б) Я предполагаю, что «решение» не работает, и нам нужен уникальный индекс для каждой строки здесь — по крайней мере, это упростило бы задачу.