Запрос SQL в Access2000

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Запрос SQL в Access2000

Сообщение Rojohn » 09.03.2006 (Чт) 16:55

Ув. знатоки SQL!
Возможно ли в один запрос написать такое:
Форматируйте код, пожалуйста.
1)
Код: Выделить всё
SELECT COUNT(PPerson.ID)
FROM PPERSON, UPERSON
WHERE ((PPERSON.UPESRON_CODE=UPERSON.ID) And (UPERSON.ID=10));

2)
Код: Выделить всё
SELECT COUNT(DOC.ID)
FROM DOCS, UPERSON
WHERE ((DOCS.UPESRON_CODE=UPERSON.ID) And (UPERSON.ID=10));

Отношения UPERSON к PPERSON и UPERSON к DOCS один ко многим.
Писал с джоинами и через алиасы, но результат даёт неправильный.
Получается как бы собираются результаты двух различных запросов (минимум двух, может быть и больше).
Спасибо за Вашу помощь!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.03.2006 (Чт) 17:05

Для начала, это эквивалентно

Код: Выделить всё
SELECT COUNT(*)
FROM PPERSON
WHERE PPERSON.UPESRON_CODE = 10


Код: Выделить всё
SELECT COUNT(*)
FROM DOCS
WHERE DOCS.UPESRON_CODE = 10


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

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.03.2006 (Чт) 17:27

Хм... туплю, базу в названии не вижу :?

Код: Выделить всё
SELECT COUNT(*), (SELECT COUNT(*) FROM DOCS WHERE DOCS.UPESRON_CODE = 10)
FROM PPERSON
WHERE PPERSON.UPESRON_CODE = 10
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Сообщение Rojohn » 09.03.2006 (Чт) 17:39

Спасибо! Вроде работает! Не знал, что можно туда Select вставлять :) А три селекта можно так же? Думаю, что можно...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 09.03.2006 (Чт) 17:41

Лучше не злоупотребляй, а используй сохраненные запросы.
Access плохо работает с подзапросами.
Lasciate ogni speranza, voi ch'entrate.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 09.03.2006 (Чт) 17:51

GSerg: А что, Аксесс не знает, что такое коррелированный подзапрос?
Код: Выделить всё
SELECT COUNT(*) As [PersonCount],
  (SELECT COUNT(*)
  FROM DOCS
  WHERE DOCS.UPESRON_CODE = PPERSON.UPESRON_CODE) As [DocsCount]
FROM PPERSON
WHERE PPERSON.UPESRON_CODE = 10

Ну и собсно главное: изначальный вопрос непонятен. Что именно тебе нужно получить? Ибо все приведенные селекты лучше в джойновой форме писать, ничего принципиально отличного я не вижу...

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Сообщение Rojohn » 09.03.2006 (Чт) 18:06

Спасибо ещё раз! Самое главное, что надо было выяснить - это то, что можно писать вложенный запрос прям на месте выводимых полей. Что я (благодаря вам) и выяснил. А злоупотреблять придётся, т.к. запрос вызывается из VB60 с кучей условий и иначе написать нельзя вроде...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 09.03.2006 (Чт) 18:32

Ennor писал(а):GSerg: А что, Аксесс не знает, что такое коррелированный подзапрос?

А кто его знает, чего Access не знает :)
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList  
cron