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




Вниз

Проблема с SQL 


vvvic   (2001-12-10 09:01) [0]

Начал изучать SQL и возникла проблема. Как написать запрос вытаскивающий из БД(Paradox) все дублирующиеся по четырём полям записи. Заранее спасибо!



Mick   (2001-12-10 09:19) [1]

Select f1,f2,f3,f4,count(*) Quantity from MyTable
Group By f1,f2,f3,f4
Having Quantity > 1



marat   (2001-12-10 10:09) [2]

Mick - это скорее как обнаружить
есть ли такие записи в таблице
а вот если надо найти именно эти записи тогда наверно надо чуть модифицировать твой запрос
select a.id
from MyTable a
where ....



Mick   (2001-12-10 10:23) [3]

Если кроме этих четырех полей в таблице есть только PK, то это именно, то что спрашивал автор.



vvvic   (2001-12-10 10:26) [4]

> Mick
Ругается на Quantity говорит Invalid field name



Mick   (2001-12-10 10:27) [5]

Убери запятую перед Quantity



vvvic   (2001-12-10 10:32) [6]

select name, surname, pathname, datebirth, seria, number, docseria, docnumber,count(*) Quantity from police
Group By name, surname, pathname, datebirth, seria, number, docseria, docnumber
Having Quantity > 1



TaB   (2001-12-10 10:32) [7]

В разных видах SQL - это по разному, попробуй так:
Select f1,f2,f3,f4,count(*) Quantity
From MyTable
Group By f1,f2,f3,f4
Having count(*) > 1



Mick   (2001-12-10 10:36) [8]

Да, точно. "Having Count(*) > 1"



vvvic   (2001-12-10 10:42) [9]

Спасибо огромное работает!
Но если мне надо вывести 5 полей, а сравнивать на дубликаты по 4?



Mick   (2001-12-10 10:47) [10]

В этом случае только связанный подзапрос ...



vvvic   (2001-12-10 10:52) [11]

Если можно покажите пример



vvvic   (2001-12-10 10:52) [12]

> Mick
Если можно покажите пример



Mick   (2001-12-10 11:14) [13]

Например так

Select * from MyTable A
Where EXISTS
(Select B.F1,B.F2,B.F3,B.F4, Count(B.*) From MyTable B
Where B.F1 = A.F1 and B.F2 = A.F2 and B.F3 = A.F3 and B.F4 = A.F4
Group By B.F1,B.F2,B.F3,B.F3 HAVING Count(B.*) > 1)



vvvic   (2001-12-10 11:55) [14]

> Mick
Пишу следующее:
select p.name, p.surname, p.pathname, p.datebirth, p.seria, p.number
from police p
where exists
(select u.name, u.surname, u.pathname, u.datebirth, count(u.*)
from police u
where (u.name=p.name) and (u.surname=p.surname ) and
(u.pathname=p.pathname) and (u.datebirth=p.datebirth)
Group By u.name, u.surname, u.pathname, u.datebirth Having count(u.*) > 1)
А он мне ошибку Invalid field name!
Хотя поля указаны правильно.
Может что-то не то?



Mick   (2001-12-10 12:06) [15]

Вот LocalSQL запрос, 100% работающий на Paradox

Select * from MyTable A
Where EXISTS
(Select B.F1,B.F2,B.F3,B.F4, Count(*) From MyTable B
Where B.F1 = A.F1 and B.F2 = A.F2 and B.F3 = A.F3 and B.F4 = A.F4
Group By B.F1,B.F2,B.F3,B.F4 HAVING Count(*) > 1)



vvvic   (2001-12-10 12:26) [16]

Огромное блогадарю!
В count-е убрал псевдоним и заработало!




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




Наверх





Память: 0.73 MB
Время: 0.04 c
3-28410           Don                   2001-12-07 16:01  2002.01.10  
Вывод текста в заголовке StringGrid-а вертикально


3-28414           Mazer                 2001-12-07 10:54  2002.01.10  
DBF+DBT?


1-28502           Серега                2001-12-16 19:01  2002.01.10  
I/O Error 103 и подавление системного сообщения.


3-28440           Сержик                2001-12-06 13:06  2002.01.10  
Как узнать высоту frMemoView после подстановки в них данных


6-28522           Serguar               2001-10-09 11:01  2002.01.10  
Как отследить событие <reset> компьютера на котором висит подконнекченый к серверу клиент