Вниз
Скачать: CL | DM;

Select ... in (Select ...)   Найти похожие ветки 

← →
apl   (2006-05-26 12:28) [0]

Подскажите
Запрос вида
Select id,.... from Person
   where id in (Select id from Person1 where ...)

классно выбирает те записи из Person для которых есть записи в результате выборки из таблицы Person1 сравнивая поле id.
Мне нужно выбрать сразу по 3-м полям. Примерно так:
Select fam,im,ot,... from Person
 where fam,im,ot in
   (Select fam,im,ot,count(*) from Person
       group by fam,im,ot HAVING (count(*)>1))

Такая канструкция - ругается. :(
Это - попытка построить список полных однофамильцев включив каждого однофамильца в результат.
Или как-то можно иначе?


← →
Sergey13 ©   (2006-05-26 12:31) [1]

Можно попорбовать с exists сделать. Правда работать будет скорее всего медленнее.


← →
stone ©   (2006-05-26 12:31) [2]

типа того

Select fam,im,ot,... from Person p
where exists (Select fam,im,ot,count(*) from Person where fam = p.fam and im = p.im and ot = p.ot
      group by fam,im,ot HAVING (count(*)>1))


← →
MsGuns ©   (2006-05-26 12:37) [3]

Select fam,im,ot,count(*) as CNT from Person
   group by fam,im,ot
   Where CNT>1


← →
MsGuns ©   (2006-05-26 12:38) [4]

[3] не считать.
Послал ошибочно ;)


← →
apl   (2006-05-26 12:40) [5]

В результирующую выборку мне нужно включить
КАЖДОГО однофамильма: фамилия, имя, отчество, паспорт, адрес... имя любовницы. а не только сам факт того, кто такието в таком кол-ве.


← →
Lexer ©   (2006-05-26 12:41) [6]

а что если пойти по пути объединения:
SELECT P.fam, P.im, P.ot, COUNT(P1.fam) ,....
 FROM Person1 P1
 LEFT JOIN Person P
   ON P.fam = P1.fam,
  AND P.im = P1.im,
  AND P.ot = P1.ot
GROUP BY P1.fam, P1.im, P1.ot, ...
HAVING (COUNT(P1.fam)>1))

енто непроверенный набросок, за него не отвечаю, но можно посмотреть в этом направлении...


← →
sniknik ©   (2006-05-26 12:42) [7]

примерно так
Select p.fam,p.im,p.ot,... s.Cnt from Person p
INNER JOIN
  (Select fam,im,ot,count(*) AS Cnt from Person
      group by fam,im,ot HAVING (count(*)>1)) s
ON p.fam=s.fam AND p.im=s.im AND p.ot=s.ot


← →
Val ©   (2006-05-26 12:43) [8]

>[5] apl   (26.05.06 12:40)
_внимательно_ читаем  [2] stone ©   (26.05.06 12:31), смотрим, что выбирается в select, думаем...


← →
apl   (2006-05-26 12:43) [9]

Спасибо всем


← →
novill ©   (2006-05-26 18:01) [10]


> Select fam,im,ot,... from Person
>  where fam,im,ot in
>    (Select fam,im,ot,count(*) from Person
>        group by fam,im,ot HAVING (count(*)>1))

Попробуйте в условии запятые между полями заменить на конкатенцию строк

Select fam,im,ot,... from Person
 where fam||im||ot in
   (Select fam||im||ot from Person
       group by fam,im,ot HAVING (count(*)>1))


← →
evvcom ©   (2006-05-29 08:22) [11]


> заменить на конкатенцию строк

не надо так делать


← →
novill ©   (2006-05-29 11:10) [12]


> > заменить на конкатенцию строк
>
> не надо так делать

Почему?


← →
sniknik ©   (2006-05-29 11:39) [13]

> Почему?
вычисляемое выражение не используются индексы даже если есть, полный скан таблицы, плохой план... тормоза.
и ни одного плюса.



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

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.025 c
15-1151652157
Артем22
2006-06-30 11:22
2006.07.30
"Компиляторы" e-books


1-1150156552
кактусбел
2006-06-13 03:55
2006.07.30
Смена языков интерфейса при помощи xml


15-1151390965
Иксик
2006-06-27 10:49
2006.07.30
Идиотский вопрос


2-1152266882
Diksa
2006-07-07 14:08
2006.07.30
Новая запись


3-1148903751
ttt_111
2006-05-29 15:55
2006.07.30
Работа с DBGrid.




   Наверх