У меня есть модель PostgreSQL (созданная в контексте Django), которая выглядит примерно так:
CREATE TABLE org (
id INTEGER NOT NULL,
parent_id INTEGER,
name CHARACTER VARYING(24),
org_type CHARACTER VARYING(8),
country CHARACTER VARYING(2)
)
CREATE TABLE rate (
id INTEGER NOT NULL,
org_id INTEGER NOT NULL,
rate DOUBLE PRECISION NOT NULL,
currency CHARACTER VARYING(3)
)
где org_type является одним из "group", "company" и "branch". У каждого филиала есть компания, и только группы принадлежат группе. Учитывая произвольную компанию или филиал и страну, мне нужно найти все тарифы, для которых org_id - это компания и филиал, принадлежащие к той же группе и находящиеся в указанной стране. Таким образом, на следующей диаграмме для компании 123 (в Канаде) или филиала 124 (в Торонто) при поиске тарифов со страной = "США" будут найдены тарифы, принадлежащие компаниям или филиалам, в поле с надписью "Выбрано":
![enter image description here](https://i.stack.imgur.com/NlHaC.png)
Я пытаюсь что-то вроде следующего для компаний, где $1
- код страны, а $2
- идентификатор организации:
SELECT rate.org_id, rate.rate, rate.currency
FROM rate, org
WHERE (
org.country = $1 AND
rate.org_id=org.id AND
org.parent_id = $2
) OR (
...
и затем я застреваю, пытаясь выяснить, как попросить филиалы, принадлежащие одной из компаний, которые я только что нашел. Я действительно предпочел бы одно большое предложение WHERE, которое вводит все тарифы любой соответствующей организации, чтобы мне не приходилось забивать БД целой кучей запросов.
Редактировать
Основываясь на ответе lau , я попробовал пример ( скрипта SQL ), но это только возвратные ставки для организации, с которой я начинаю.