SQL-запрос дважды обрабатывает одну и ту же таблицу, но получает только один выходной столбец mysql

0

Мне нужно перечислить два 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
    Я бы зафиксировал презентацию в вышеприведенном слое.
Теги:

1 ответ

0

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

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

  • 0
    Спасибо @Gordon Linoff, моя таблица RELATIONS имеет 60M строк, это может быть слишком много для ИЛИ. Посмотрим. Я сравню, лучше ли выполнить запрос дважды, а потом UNION. еще раз спасибо
  • 1
    @ user3489502. , , UNION / UNION ALL - это, вероятно, лучший подход с таким количеством строк.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню