собрать атрибут из нескольких SQL таблиц - PullRequest
0 голосов
/ 27 мая 2020

У меня есть несколько SQL таблиц, скажем T1, T2, T3, каждая из которых имеет 2 атрибута date, some_id. Я хочу собрать все идентификаторы из каждой таблицы на заданную дату.

SELECT DISTINCT DATE, SOME_ID from T1
WHERE DATE = &&Date
ORDER BY SOME_ID desc;

Есть ли способ получить таблицу в форме:

DATE SOME_ID1 SOME_ID2 SOME_ID3
31/12/2019 id1 id2 id3
...

Не использовать запрос ниже?

SELECT T1.DATE,
       T1.SOME_ID AS SOME_ID1,
       T2.SOME_ID AS SOME_ID2,
       T3.SOME_ID AS SOME_ID3,
FROM T1
JOIN T2
   ON T1.DATE = T2.DATE
      AND T2.DATE = &&Date
JOIN T3
   ON T1.DATE = T3.DATE
      AND T3.DATE = &&Date
ORDER BY SOME_ID1, SOME_ID2, SOME_ID3

Я спрашиваю, потому что у меня гораздо больше трех таблиц.

Примеры данных: T1:

date some_id
31/12/2019 25
31/12/2019 11
31/05/2019 12
31/08/2019 124

T2:

date some_id
31/01/2019 205
31/08/2019 101
31/12/2019 120
31/08/2019 14

T3 :

date some_id
31/03/2019 245
31/08/2019 141
28/02/2019 129
30/06/2019 114
31/12/2019 651

Ожидаемый результат для &&Date = 31/12/2019:

DATE SOME_ID1 SOME_ID2 SOME_ID3
31/12/2019 25 120 651
31/12/2019 11 120 651

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Как насчет того, чтобы просто использовать union?

SELECT DATE, SOME_ID 
FROM T1
WHERE DATE = &&Date
UNION
SELECT DATE, SOME_ID 
FROM T2
WHERE DATE = &&Date
UNION
SELECT DATE, SOME_ID 
FROM T3
WHERE DATE = &&Date
0 голосов
/ 27 мая 2020

Вы можете использовать полные внешние соединения, например:

select
  coalesce(a.my_date, b.my_date, c.my_date) as my_date,
  a.some_id as some_id1,
  b.some_id as some_id2,
  c.some_id as some_id3
from (
  select distinct my_date, some_id from t1 where date = &&date
) a
full outer join (
  select distinct my_date, some_id from t2 where date = &&date
) b
full outer join (
  select distinct my_date, some_id from t3 where date = &&date
) c

Вы можете легко расширить этот запрос, используя стратегию, показанную выше, на множество таблиц.

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