Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi 3 и union запросов (трех) / 4 сообщений из 4, страница 1 из 1
01.03.2002, 12:26
    #32024173
Dr.Maniac
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 3 и union запросов (трех)
БД Interbase + Дельфи 3.
Есть три запроса проводящие выборку каждый из двух таблиц по некоторым критериям. Во всех трех запросах есть головная таблица, из которой проводится выборка необходимой информации (для всех трех запросов - одна) и в каждом запросе - еще одна таблица, определяющая критерии отбора записей из головной таблицы.
С точки зрения быстроты отбора записей - лучше всего показал себя UNION из отдельных запросов, чем какое либо другое объединение.
Из программы можно задавать любую комбинацию запросов, запрос формируется нормально. Выбор одного запроса либо двух в любой комбинации дает прерасный результат. Выбор всех трех - ругается на то, что одно из полей не найдено. Запуск объединенного запроса из Interbase WISQL дает результат без ошибок.
...
Рейтинг: 0 / 0
05.03.2002, 20:14
    #32024471
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 3 и union запросов (трех)
Желательно увидеть полный текст запроса
...
Рейтинг: 0 / 0
07.03.2002, 09:44
    #32024672
Dr.Maniac
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 3 и union запросов (трех)
SELECT OBJECT.NAME1 ,OBJECT.NAME2,OBJECT.NAME3,
OBJECT.N_PROT,OBJECT.N_ENTRY,OBJECT.CITY,
OBJECT.S_PASSPORT ,OBJECT.N_PASSPORT,OBJECT.REGION,
OBJECT.STREET,OBJECT.BUILDING,OBJECT.FLAT,
OBJECT.NOTE,(SELECT SUM_PAY FROM PAY
WHERE OBJECT.N_ENTRY=PAY.OBJECT AND PAY.TYPE=1
PLAN (PAY INDEX (PAY_MAIN)))
FROM HISTORY H LEFT JOIN OBJECT ON OBJECT.N_ENTRY = H.OBJECT
WHERE H.PLACE_C IN (34,4585,6183,7364,10601,15536)
UNION

SELECT OBJECT.NAME1 ,OBJECT.NAME2,OBJECT.NAME3,
OBJECT.N_PROT,OBJECT.N_ENTRY,OBJECT.CITY,
OBJECT.S_PASSPORT ,OBJECT.N_PASSPORT,OBJECT.REGION,
OBJECT.STREET,OBJECT.BUILDING,OBJECT.FLAT,
OBJECT.NOTE,(SELECT SUM_PAY FROM PAY
WHERE OBJECT.N_ENTRY=PAY.OBJECT AND PAY.TYPE=1
PLAN (PAY INDEX (PAY_MAIN)))
FROM AROLSEN_TEXT A LEFT JOIN OBJECT ON OBJECT.N_ENTRY = A.OBJECT
WHERE ( A.REESTRID IN (854,1265,1563) OR A.ADDINFO CONTAINING 'Вена')

UNION

SELECT OBJECT.NAME1 ,OBJECT.NAME2,OBJECT.NAME3,
OBJECT.N_PROT,OBJECT.N_ENTRY,OBJECT.CITY,
OBJECT.S_PASSPORT ,OBJECT.N_PASSPORT,OBJECT.REGION,
OBJECT.STREET,OBJECT.BUILDING,OBJECT.FLAT,
OBJECT.NOTE,(SELECT SUM_PAY FROM PAY
WHERE OBJECT.N_ENTRY=PAY.OBJECT AND PAY.TYPE=1
PLAN (PAY INDEX (PAY_MAIN)))
FROM CLIENT_TEXT C LEFT JOIN OBJECT ON OBJECT.N_ENTRY = C.OBJECT WHERE
(C.AREA_NAME CONTAINING 'Вена' OR C.WORK_TYPE CONTAINING 'Вена')

Пишет - не найдено поле NOTE. При комбинациях из двух блоков - все ок.
...
Рейтинг: 0 / 0
08.03.2002, 05:18
    #32024765
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 3 и union запросов (трех)
Ничего не понимаю.
Попробуем сузить область поиска ошибки.
Нужно провести следующие эксперименты.
1. Посмотреть, как запрос выглядит в профилере - дельфа ничего не своевольничает?
2. Исключить из запроса поле NOTE.
3. Поменять местами NOTE и FLAT
4. Вставить между FLAT и суммирующим подзапросом константу, например 0.
5. Именовать поле суммирующего подзапроса (as TOTAL_PAY, к примеру)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi 3 и union запросов (трех) / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]