2016-10-25 4 views
1

Добрый день, я новичок в сообществе, если в то время я сделал что-то не так, чтобы задать этот вопрос, пожалуйста, поправьте меня, я был бы очень признателен. У меня есть таблица, содержащая два столбца имя_соединения name и status.Как удалить дублированные строки из MySQL? Удалить

Phone_number status 
“9999999999” “A” 

нужно удалить дубликаты между T1 и T2, если они имеют один и тот же PHONE_NUMBER, но я хочу, чтобы сделать номер, который имеет статус «» А «»;

Я сделал пример, пытаясь решить проблему, но чего-то не хватает, потому что это дало мне результат не для того, что я ищу.

DELETE t1.* 
FROM 
    tablename t1 INNER JOIN tablename t2 
    ON t1.phone_number = t2.phone_number 
    AND t1.status !="A" 

Может кто-нибудь помочь мне, пожалуйста?

+0

Только те 2 столбца в таблице? – jarlh

+0

Можете ли вы разместить некоторые данные образца для таблиц t1, t2 и ur желаемого вывода – Teja

+0

в записях табуляции, которые дублируются в phone_number, но с другим статусом меня интересует удаление дубликатов, но нет никакой регистрации статуса «A», ' –

ответ

0

Непонятно, что означает «удалить между T1 и T2». Очевидно, вы пытаетесь удалить только из T1 в вашем примере кода.

Следующие строки удаляются из t1 формы (номер телефона, а не «А»), если в t2 формы (одна и та же номер телефона, «А») есть строка. Если T1 = T2, то это приведет к удалению всех строк из T1, которые являются дубликатами того же номера телефона, оставляя только копию номера телефона со статусом «A».

удалить из t1 где t1.status = 'A' и t1.phone_number в (выберите PHONE_NUMBER от t2 где t2.phone_number = t1.phone_number и t2.status = 'А'!);

+0

в записях tablename, которые дублируются в phone_number, но с другим статусом, интересует меня, удаляет дубликаты, но нет никаких регистраций, имеющих статус' 'A' ' –

0

Если я правильно понял, что вам нужно, удаляется из одной таблицы, когда статус А на другом; если да, то вам нужно два удалений:

DELETE t1 
FROM 
    tablename t1 INNER JOIN tablename t2 
    ON t1.phone_number = t2.phone_number 
    AND t1.status !='A' AND t2.status='A' 

DELETE t2 
FROM 
    tablename t1 INNER JOIN tablename t2 
    ON t1.phone_number = t2.phone_number 
    AND t1.status ='A' AND t2.status !='A' 
+0

в записях таблиц, которые дублируются в phone_number, но с другим статусом , меня интересует удаление дубликатов, но нет никакой регистрации, имеющей статус '' A '' –

0

Альтернативный способ может быть, чтобы выбрать только отдельные строки из вашего t1 и вставить их в новую таблицу:

CREATE TABLE newtable LIKE `table`; 
INSERT INTO `newtable` SELECT DISTINCT * FROM `table`; 

После этого вы можете переименовать обе таблицы соответственно , Конечно, это имеет смысл только один раз.