Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Нужнапомощь с запросом


Suntechnic ©   (2008-12-06 00:14:00) 

Друзья, помогите с запросом плз, не въезжаю как... Есть набор вроде этого:

B D
1 14
1 15 *
2 15 *
2 25
3 1
3 15 *
3 20
4 15 *
4 15 *
4 20
5 15 *
5 20

Нужно получить все пары "B","D" *, в которых присутствует повторяющееся во всем наборе число, в данном случае это число D = 15. Это число - искомое, поэтому where никак не годится. Известно только, что в пределах каждогозначения "B" оно обязательно повторяется один или боле раз.


Palladin   (2008-12-06 17:07:00) [1]


> Table несъедобный

здесь, вообще говоря, должно было быть имя твоейтаблицы
разве это не очевидно?


other Suntechnic   (2008-12-06 17:04:00) [2]

Ну ладно, T1, T2, T3 - псевдонимы. Table несъедобный, убрал - ругается на отсутствие указанных таблиц. В общем, идея понятна, переделаю. Спасибо всем!

P.S. Последний раз был на этом форуме уж не помню, года три назад - а имена всё те же! Респект вашему приверженству, господа!


sniknik   (2008-12-06 16:14:00) [3]

> вот только почему-то синтакс оказывается несъедобным для Access.
синтаксис у всех разный, чего бы там не говорили о совместимости и стандарты...


Palladin   (2008-12-06 15:28:00) [4]

псевдомы для таблиц и выборок


other Suntechnic   (2008-12-06 15:21:00) [5]

Прошу прощения за некоторый игнор своего поста.
Насколько я понял, задача имеет относительно несложное решение, вот только почему-то синтакс оказывается несъедобным для Access. С чем едят Table T1, Table T2 и "Table) T3"?


Palladin   (2008-12-06 14:56:00) [6]


> (SELECT DISTINCT B,D FROM Table) T3 WHERE T3.D=T1.D

ВО! :) до чего я не додумался, решил пихнуть условие внутрь distincta, а до вынесения его повыше не допер...  )


sniknik   (2008-12-06 14:31:00) [7]

> нехотИт access работать с distinct внутри count
можно решить переписав так

SELECT * FROM Table T1
WHERE
(SELECT Count(*) FROM (SELECT DISTINCT B FROM Table T2)) =
(SELECT Count(*) FROM (SELECT DISTINCT B,D FROM Table) T3 WHERE T3.D=T1.D)


Palladin   (2008-12-06 12:34:00) [8]


> Johnmen ©   (06.12.08 11:53) [7]

тоже сначала так подумал, нехотИт access работать с distinct внутри count


Johnmen   (2008-12-06 11:53:00) [9]


> Palladin ©   (06.12.08 10:53) [6]

Понятно.

Тогда примерно так:
SELECT * FROM Table T1
WHERE
 (SELECT COUNT(DISTINCT T2.B) FROM Table T2) =
 (SELECT COUNT(DISTINCT CAST(T3.B AS VARCHAR(16))||'+'||CAST(T3.D AS VARCHAR(16)))
   FROM Table T3 WHERE T3.D=T1.D)


Palladin   (2008-12-06 10:53:00) [10]


> Johnmen ©   (06.12.08 10:48) [5]

нет, 20 не канает, ему нужно найти число которое принадлежит всем из select distinct b


Johnmen   (2008-12-06 10:48:00) [11]


> Нужно получить все пары "B","D" *, в которых присутствует
> повторяющееся во всем наборе число, в данном случае это
> число D = 15.

А, кроме того, ещё и 20.
Поэтому формулируй вопрос ещё раз.


other Suntechnic   (2008-12-06 01:35:00) [12]

БД в данном случае Access, если необходимо - пойду на MS SQL, вероятно, компакт.
Спок ночи!


Германн   (2008-12-06 01:28:00) [13]


> other Suntechnic   (06.12.08 01:14) [2]
>
> Наверное, не тот;) Насчет количества запросов - главное
> результат, конечно
>

Уже понял что "не тот".
Тогда уточни какую БД ты пользуешь.
Но ответ ожидай только утром и далее. Ночью тут некому решать такие задачи.


other Suntechnic   (2008-12-06 01:14:00) [14]

Наверное, не тот;) Насчет количества запросов - главное результат, конечно


Германн   (2008-12-06 01:01:00) [15]

Одним запросом?

P.S. А ты тотSuntechnic?


Наверх

Титульная страница Поиск, карта сайта Написать письмо