![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как выбрать только дубли
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]"Зацените! Я сделал одну фитчу, а в ней какая-то бага. Что мне делать?"