Подскажите, как можно сделать запрос
Добавлено: 23 фев 2008, 16:17
Есть таблица районов REGION (REGID (PK), REGNAME, MACROREG) где MACROREG - расширенный "регион" в который могут входить несколько районов.
Есть таблица исполнителей UNITS в которой есть поле HOME, содержащее ID региона куда исполнитель желал бы отправиться
Есть таблица заказов ORDERS в которой нас интересует только поле REGTO - регион куда направлен заказ.
Задача - прицепить к таблице ORDERS некое поле ISHOME которое покажет есть ли в таблице исполнителей хотя бы один человек, который хочет направиться в район, входящий в тот же регион, в который входит REGTO из таблицы заказов.
Для простоты расскажу человеческим языком
Водитель просит диспетчера отправить его "домой" с заказом. То есть взять заказ, уехать в район проживания, и закончить работу. Диспетчер ставит ему пометку этого региона (поле HOME таблицы UNITS). Появляется заказ, ведущий в тот же регион, к которому принадлежит желаемый район отправки для водителя. Заказ должет быть помечен специальной пометкой, чтобы диспетчер видел, что есть желающий(ие) отправиться туда "с последнм заказом".
Раньше делал так:
Создавал Calculated поле IsHome которое обсчитывалось в OnCalcFields с помощью выполнения запроса:
А как бы это сделать по-человечески? Надо что то вроде поля, которое формируется по условию EXISTS что-ли...
Прикол еще в том, что поле должно быть именно динамическим. Нельзя физически создать поле и заполнять при добавлении заказа, потому что пометка с водителя может быть снята в любой момент, и надо, чтобы в этом случае пропала пометка и с заказа...
Есть таблица исполнителей UNITS в которой есть поле HOME, содержащее ID региона куда исполнитель желал бы отправиться

Есть таблица заказов ORDERS в которой нас интересует только поле REGTO - регион куда направлен заказ.
Задача - прицепить к таблице ORDERS некое поле ISHOME которое покажет есть ли в таблице исполнителей хотя бы один человек, который хочет направиться в район, входящий в тот же регион, в который входит REGTO из таблицы заказов.
Для простоты расскажу человеческим языком

Раньше делал так:
Создавал Calculated поле IsHome которое обсчитывалось в OnCalcFields с помощью выполнения запроса:
Код: Выделить всё
SELECT UN.UNITID FROM UNITS UN
WHERE UN.HOME IN
(
SELECT RG.REGID
FROM REGION RG
WHERE RG.MACROREG IN
(SELECT RG1.MACROREG
FROM REGION RG1
WHERE RG1.REGID = :REGTO
)
)
Прикол еще в том, что поле должно быть именно динамическим. Нельзя физически создать поле и заполнять при добавлении заказа, потому что пометка с водителя может быть снята в любой момент, и надо, чтобы в этом случае пропала пометка и с заказа...