Выберите все из одной таблицы, а некоторые из другой таблицы по SQL, объединяющему две переменные

Мне трудно выбирать данные из двух таблиц. Я пытался использовать каждое соединение, но не могу понять это. Я использую Postgresql

Это мои таблицы: Table_a

date, class, count_of_a
4/1/2015, B, 888
4/2/2015, A, 533
4/2/2015, A, 432
4/3/2015, C, 484

TABLE_B

date, class, count_of_b
4/2/2015, B, 345
4/3/2015, D, 553
4/3/2015, C, 334

Я хочу это как мой результат:

date, class, count_of_a, count_of_b
4/2/2015, B,    , 345
4/3/2015, D,    , 553
4/1/2015, B, 888,
4/2/2015, A, 533,
4/2/2015, A, 432,
4/3/2015, C, 484, 334

1 ответ

Вы можете сделать это либо с full outer join или же union all а также group by:

select date, class, sum(count_of_a) as count_of_a, sum(count_of_b) as count_of_b
from ((select date, class, count_of_a, NULL as count_of_b
       from table_a
      ) union all
      (select date, class, NULL as count_of_a, count_of_b
       from table_b
      )
     ) ab
group by date, class;

Этот метод имеет несколько преимуществ перед full outer join (кроме не нужна куча coalesce() заявления в from). Прежде всего, он более общий, поэтому он будет работать, когда date и / или class взять NULL ценности. Кроме того, он будет правильно добавлять значения при наличии нескольких значений для комбинации класса / даты.

Другие вопросы по тегам