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

Вниз

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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.01 c
1-1150347714
Mva
2006-06-15 09:01
2006.07.30
Печать PCL


15-1151413524
NORDmen
2006-06-27 17:05
2006.07.30
перевод слов/предложений с помошью программ-переводчиков


2-1152454547
Зм1й
2006-07-09 18:15
2006.07.30
Canvas


15-1151468479
Dimmmonn
2006-06-28 08:21
2006.07.30
нужны сэмплы!


2-1152622159
Neo Trinitron
2006-07-11 16:49
2006.07.30
dbf --> MSSQL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский