Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как выбрать только дубли


Страницы:   1 2

Term ©   (2005-10-31 17:20:00) 

Поля Naimen, Firma, Country, Nozol_Gr, NDS

В таблице есть записи которые дублируют друг друга как выбрать только те записи у которых есть дублирующие

я пытаюсь использовать EXISTS но чтото результат не получается


Juice   (2005-11-01 10:44:00) [1]

Я например, чтобы дубликаты не отбирались просто ставил <>max(key). Хуже когда ключа нет в таблице, был у меня такой гемор на IB, через системные таблицы конечно решается.


Курдль   (2005-11-01 10:18:00) [2]


> Term ©   (31.10.05 17:47) [14]
> > SELECT *
> > FROM Spr_Medcine sm
> > WHERE EXISTS(
> > SELECT DISTINCT *
> > FROM Spr_Medcine sm INNER JOIN
> >      Spr_Medcine sm1 ON
> > (sm.Naimen=sm1.Naimen)and
> > (sm.Firma=sm1.Firma)and
> > (sm.Country=sm1.Country)and
> > (sm.Nozol_Gr=sm1.Nozol_Gr)and
> > (sm.NDS=sm1.NDS)and(sm.Med_Id<>sm1.Med_Id))
> пробую так но в итоге получаю все записи таблицы


Напомнило анекдот:
Приходит на телеграф овчарка, приносит деньги и заполненный бланк.
На бланке: "Гав, гав-гав, гав-гав-гав, гав-гав".
Телеграфистка: За эти деньги Вы могли бы дописать еще одно "гав".
Овчарка: "Но ведь тогда какая-то х...ня получится!!!" 8-()

INNER JOIN = "гав"


Anatoly Podgoretsky   (2005-10-31 19:32:00) [3]

Здесь Дельфи не пахнет


Term   (2005-10-31 18:30:00) [4]

ну да но ничего для информации что править подойдёт


Johnmen   (2005-10-31 18:02:00) [5]

Всё равно будет >=2 записей с одинаковыми полями кроме ключевого...


Term   (2005-10-31 17:53:00) [6]

SELECT *
FROM Spr_Medcine sm
WHERE EXISTS(
SELECT  *
FROM  Spr_Medcine sm1 WHERE
(sm.Naimen=sm1.Naimen)and
(sm.Firma=sm1.Firma)and
(sm.Country=sm1.Country)and
(sm.Nozol_Gr=sm1.Nozol_Gr)and
(sm.NDS=sm1.NDS)and(sm.Med_Id<>sm1.Med_Id))
order by sm.Naimen


так вот вроде всё правильно


Johnmen   (2005-10-31 17:49:00) [7]

>просто в результате каждый дубль получается дважды

Естественно, ведь операция "рефлексивна"...:)


Term   (2005-10-31 17:47:00) [8]


> SELECT *
> FROM Spr_Medcine sm
> WHERE EXISTS(
> SELECT DISTINCT *
> FROM Spr_Medcine sm INNER JOIN
>      Spr_Medcine sm1 ON
> (sm.Naimen=sm1.Naimen)and
> (sm.Firma=sm1.Firma)and
> (sm.Country=sm1.Country)and
> (sm.Nozol_Gr=sm1.Nozol_Gr)and
> (sm.NDS=sm1.NDS)and(sm.Med_Id<>sm1.Med_Id))


пробую так но в итоге получаю все записи таблицы


Lexer   (2005-10-31 17:46:00) [9]

SELECT COUNT(*), sm1.Naimen, sm1.Firma
FROM Spr_Medcine sm
GROUP BY sm1.Naimen, sm1.Firma
HAVING COUNT(*) > 1


Term   (2005-10-31 17:45:00) [10]


> and(sm.Med_Id>sm1.Med_Id)

это первичный ключ


Курдль   (2005-10-31 17:42:00) [11]


> Term ©   (31.10.05 17:38) [10]


Чё, я exists-а так и не дождусья?
Тогда ... and(sm.Med_Id >sm1.Med_Id)


Term   (2005-10-31 17:38:00) [12]


> Вариантов много, например можно объеденить саму с собой
> SELECT T.*
> FROM TABLE T
> INNER JOIN TABLE T2
> ON T.id_key != T2.id_key
> AND T.Naimen = T2.Naimen
> AND T.Firma =  T2.Firma
> AND ...
> Получишь все дубликаты


наподобие сделал

SELECT DISTINCT*
FROM Spr_Medcine sm INNER JOIN
    Spr_Medcine sm1 ON
(sm.Naimen=sm1.Naimen)and
(sm.Firma=sm1.Firma)and
(sm.Country=sm1.Country)and
(sm.Nozol_Gr=sm1.Nozol_Gr)and
(sm.NDS=sm1.NDS)and(sm.Med_Id<>sm1.Med_Id)


просто в результате каждый дубль получается дважды


Term   (2005-10-31 17:37:00) [13]

MSSQL2000


Johnmen   (2005-10-31 17:35:00) [14]

Осталось озвучить СУБД...


Lexer   (2005-10-31 17:35:00) [15]

Вариантов много, например можно объеденить саму с собой
SELECT T.*
FROM TABLE T
INNER JOIN TABLE T2
ON T.id_key != T2.id_key
AND T.Naimen = T2.Naimen
AND T.Firma =  T2.Firma
AND ...

Получишь все дубликаты


Курдль   (2005-10-31 17:34:00) [16]

"Выбери все записи, для которых существуют другие записи, у которых все поля совпадают с соотв. полями исходных записей, кроме ключевого"


Term   (2005-10-31 17:34:00) [17]

напишите просто что нужно сделать


Курдль   (2005-10-31 17:32:00) [18]


> Term ©   (31.10.05 17:29) [3]
>
> ну в таблице есть записи которые друг друга повторяют, как
> выбрать только записи у которых есть дубли


Как раз это все поняли, а вот какой exists не получился - не в курсах :)


Term   (2005-10-31 17:29:00) [19]

ну в таблице есть записи которые друг друга повторяют, как выбрать только записи у которых есть дубли


Курдль   (2005-10-31 17:24:00) [20]

"Зацените! Я сделал одну фитчу, а в ней какая-то бага. Что мне делать?"


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо