Мне нужно перечислить два ENTITY_ID (путем запроса таблицы RELATIONS с WHERE между двумя датами), относящиеся к каждой паре SOURCE/ACCOUNT в таблице RELATIONS.
- ENTITIES table
ENTITY_ID (PK)
ENTITY_NAME
- ACCOUNTS table
SOURCE (PK)
ACCOUNT (PK)
ENTITY_ID (FK)
- RELATIONS table
RELATION_ID (PK)
SOURCE_1 (FK)
ACCOUNT_1 (FK)
SOURCE_2 (FK)
ACCOUNT_2 (FK)
TIMESTAMP
Приведенный ниже запрос извлекает ENTITY_ID одной пары SOURCE/ACCOUNT (SOURCE_1/ACCOUNT_1), но мне также потребуется ENTITY_ID для SOURCE_2/ACCOUNT_2, не в качестве второго столбца в выходных данных, а в качестве второй строки (значения).
SELECT A.ENTITY_ID
FROM RELATIONS R
JOIN ACCOUNTS A
ON R.SOURCE_1 = A.SOURCE
AND R.ACCOUNT_1 = A.ACCOUNT
WHERE R.TIMESTAMP >= DATETIME1 AND R.TIMESTAMP < DATETIME2
Пример необходимого вывода (1 столбец, 2 значения):
ENTITY_ID
Output record #1 1234
Output record #2 1235
Если вам нужны значения в разных строках, то вы можете сделать:
SELECT A.ENTITY_ID
FROM RELATIONS R JOIN
ACCOUNTS A
ON (R.SOURCE_1 = A.SOURCE AND
R.ACCOUNT_1 = A.ACCOUNT
) OR
(R.SOURCE_2 = A.SOURCE AND
R.ACCOUNT_2 = A.ACCOUNT
)
WHERE R.TIMESTAMP >= DATETIME1 AND
R.TIMESTAMP < DATETIME2;
OR
как правило, снижает производительность JOIN
, но это будет работать, если ваши данные не очень большие.
UNION
/ UNION ALL
- это, вероятно, лучший подход с таким количеством строк.