SQL-соединение для столбцов разной длины - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь объединить две таблицы в SQL, где столбцы содержат разное количество уникальных записей.

Когда я использую полное объединение, дополнительные записи в объединенном столбце отсутствуют.

Код, который я использую (в SQL-протоколе SAS):

proc sql;
create table table3 as
select table1.*, table2.*
from table1 full join table2
on table1.id = table2.id;
quit;

Визуальный пример проблемы (невозможно показать реальные таблицы, содержащие конфиденциальные данные)

Table 1
  id  | count1
  1   |   2
  2   |   3
  3   |   2

Table 2
 id   | count2
  1   |   4
  2   |   5
  3   |   6
  4   |   2

Table 3
 id   | counta | countb
  1   |   2    |   4
  2   |   3    |   5
  3   |   2    |   6
  -   |   -    |   2     <----- I want don't want the id column to be blank in this row

Надеюсь, я достаточно ясно объяснил свою проблему, заранее благодарю за помощь.

Ответы [ 2 ]

2 голосов
/ 27 сентября 2019

Идентификатор из таблицы 1 является пустым, поскольку строка из таблицы 2 не соответствует в таблице 1. Попробуйте просмотреть выходные данные этого запроса:

select coalesce(table1.id, table2.id) as id, table1.count1, table2.count2
from table1 full join table2
on table1.id = table2.id;

Объединение работает слева направо, возвращая первый ненулевое значение (может принимать более 2 аргументов).Если идентификатор в таблице 1 равен нулю, вместо него используется идентификатор из таблицы 2

Я также рекомендую псевдоним всех таблиц в запросах, поэтому я написал бы следующее:

SELECT 
  COALESCE(t1.id, t2.id) as id, 
  t1.count1, 
  t2.count2
FROM 
  table1 t1 
  FULL OUTER JOIN 
  table2 t2
  ON 
    t1.id = t2.id;
0 голосов
/ 27 сентября 2019

Просто выберите coalesce(t1.id, t2.id), вернет первое ненулевое значение идентификатора.

...