SQL: выбрать все записи, не выбранные другим запросом - PullRequest
4 голосов
/ 01 июня 2011

Я ищу запрос SQL, чтобы выбрать все записи, не выбранные другим запросом в той же таблице.В частности, я хочу выбрать все записи, которые имеют дубликаты определенного поля ('fieldA'), а затем удалить все, кроме одной из этих записей.

Таким образом, оператор выбора может выглядеть примерно так (что не работает!):

select * from table where id not in(select * from table group by fieldA)

Если один запрос невозможен, то какое решение будет наиболее эффективным?

Ответы [ 3 ]

2 голосов
/ 01 июня 2011

В частности, я хочу выбрать все записи, которые имеют дубликаты определенного поля ('fieldA'), а затем удалить все записи, кроме одной.

В этом случае присоединиться :

delete x 
from myTable x
 join myTable z on x.field = z.field
where x.id > z.id
1 голос
/ 01 июня 2011

Что-то вроде:

SELECT id FROM table WHERE id IN (
    SELECT MIN(id) FROM table GROUP BY fieldA HAVING COUNT(*) > 1
)
0 голосов
/ 01 июня 2011

Если вы измените оператор IN IN sub SELECT, чтобы он возвращал только один столбец (ID), он должен работать -

http://blog.sqlauthority.com/2008/04/22/sql-server-better-performance-left-join-or-not-in/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...