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

Мне нужно перечислить два 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

1 Ответ

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

Если вам нужны значения в разных строках, вы можете сделать:

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 s, как правило, убить производительность JOIN s, но это будет работать, если ваши данные не оченьбольшой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...