Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Вниз

Как выбрать только дубли   Найти похожие ветки 

 
Term ©   (2005-10-31 17:20) [0]

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

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

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


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

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


 
Term ©   (2005-10-31 17:24) [2]

ключи первичные у записей разные конечно, я просто поле ключа не указал


 
Term ©   (2005-10-31 17:29) [3]

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


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


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


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


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

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


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

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


 
Lexer ©   (2005-10-31 17:35) [7]

Вариантов много, например можно объеденить саму с собой
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 ...

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


 
Johnmen ©   (2005-10-31 17:35) [8]

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


 
Term ©   (2005-10-31 17:37) [9]

MSSQL2000


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


> Вариантов много, например можно объеденить саму с собой
> 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)


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


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


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


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


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


> and(sm.Med_Id>sm1.Med_Id)

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


 
Lexer ©   (2005-10-31 17:46) [13]

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


 
Term ©   (2005-10-31 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))


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


 
Johnmen ©   (2005-10-31 17:49) [15]

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

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


 
Term ©   (2005-10-31 17:53) [16]

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 18:02) [17]

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


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

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


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

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


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


> 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 = "гав"


 
Juice ©   (2005-11-01 10:44) [21]

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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.016 c
14-1132815553
Lexer
2005-11-24 09:59
2005.12.18
С нашего сайта архив стал скачиваться в битом виде


2-1133343472
Saimon
2005-11-30 12:37
2005.12.18
Обращение к компоненту по строке


2-1132726445
AndreyAR
2005-11-23 09:14
2005.12.18
Не виден сервер


14-1132914608
*Pavel
2005-11-25 13:30
2005.12.18
Штрихкоды и русские буквы


2-1133174869
Stas_on
2005-11-28 13:47
2005.12.18
Рисование стрелок под любым углом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский