Форум: "Базы";
Текущий архив: 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