Удалить строки на основе двух столбцов - PullRequest
0 голосов
/ 03 мая 2019

Как удалить строки, основываясь только на двух условиях столбца.

Пример

Table 1

id  name  phone
1   aa    123
1   aa    345
1   bb    123
2   aa    456
1   NULL  123
1         123

Мой ожидаемый результат

id name phone 
1  bb   123
2  aa   456

Мое условие для удаления: если идентификатор и имя совпадают, удалите строки Если одно из значений в условии является нулевым или пустым, оно также должно удалить строку, заданную во входных данных.

Ответы [ 3 ]

0 голосов
/ 03 мая 2019
Delete from table1 t where exists (
Select * from 
(Select id, name from table1 group by id, name having count(*) > 1) t2 where t.id = t2.id and t.name = t2.name)
0 голосов
/ 03 мая 2019
create table #tablea (
    id int,
    name varchar(3),
    phone int
)

insert into #tablea (id, name, phone)
values
    (1,'aa','123'),
    (1,'aa','345'),
    (1,'bb','123'),
    (2,'aa','456')

select * from #tablea

delete a
from #tablea a
inner join (
    select id, name
    from #tablea
    group by id, name
    having COUNT(*) > 1
) b on a.id = b.id and a.name = b.name

select * from #tablea

drop table #tablea
0 голосов
/ 03 мая 2019

Это должно делать то, что вы хотите.Вы можете сначала сделать выбор в целях тестирования, затем удалить выбор и раскомментировать удаление.

-- This joins on the table the set of data that has more then 1 row with duplicate IDs, and names.  Then you can delete from here.
    --DELETE t1
    SELECT * 
    FROM Table1 T1
    INNER JOIN (
        -- this gets all the records that have more then 1 ID and Name that are the same.
        SELECT ID, name
        FROM Table1
        GROUP BY ID, name
        HAVING COUNT(*) > 1
    ) ToDelete ON T1.ID = ToDelete.ID
    AND T1.name = ToDelete.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...