Выберите объединить две таблицы и цикл, чтобы получить два разных значения - PullRequest
0 голосов
/ 06 февраля 2019

Мне нужно запросить таблицу RELATIONS (ГДЕ между двумя датами) и получить ENTITY_ID, связанный с каждой парой 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

Есть ли способ сделать это в одном запросе?

Вывод запроса должен выглядеть следующим образом:

RELATION_ID
SOURCE_1
ACCOUNT_1
ENTITY_ID_1 (ENTITY_ID (from ACCOUNTS table) related to SOURCE_1 and ACCOUNT_1)
SOURCE_2
ACCOUNT_2
ENTITY_ID_2 (ENTITY_ID (from ACCOUNTS table) related to SOURCE_2 and ACCOUNT_2)

У меня есть идея, какполучить ENTITY_ID_1, но не уверен, как получить ENTITY_ID_2 одновременно.

SELECT
     R.RELATION_ID
    ,R.SOURCE_1
    ,R.ACCOUNT_1
    ,A.ENTITY_ID AS ENTITY_ID_1 
    ,R.SOURCE_2
    ,R.ACCOUNT_2
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 Ответ

0 голосов
/ 06 февраля 2019

Я думаю, вам просто нужно два JOIN s:

SELECT R.RELATION_ID, R.SOURCE_1, R.ACCOUNT_1,
       A1.ENTITY_ID AS ENTITY_ID_1, 
       A2.ENTITY_ID AS ENTITY_ID_2, 
       R.SOURCE_2, R.ACCOUNT_2
FROM RELATIONS R JOIN
     ACCOUNTS A1
     ON R.SOURCE_1  = A1.SOURCE AND
        R.ACCOUNT_1 = A1.ACCOUNT JOIN
     ACCOUNT A2
     ON R.SOURCE_2  = A2.SOURCE AND
        R.ACCOUNT_2 = A2.ACCOUNT
WHERE R.TIMESTAMP >= DATETIME1 AND
      R.TIMESTAMP < DATETIME2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...