SQL: повесить две таблицы на ключи другой таблицы, без всех комбинаций - PullRequest
0 голосов
/ 07 июня 2018

Следующая проблема:

Я получил две таблицы (PK = PrimaryKey):

Таблица B (да, это B, а не A. EDIT: но A существует):

ColumnHeader_PK_A    ColumnHeader_PK_B
PK_A_1               PK_B_1
PK_A_1               PK_B_2
PK_A_1               PK_B_3
PK_A_2               PK_B_1
PK_A_2               PK_B_2

таблица C:

ColumnHeader_PK_A    ColumnHeader_PK_C
PK_A_1               PK_C_1
PK_A_1               PK_C_2
PK_A_1               PK_C_3
PK_A_1               PK_C_4
PK_A_1               PK_C_5
PK_A_2               PK_C_1

Мне нужен результат, подобный следующему:

ColumnHeader_A    ColumnHeader_B    ColumnHeader_C
PK_A_1            PK_B_1            PK_C_1
PK_A_1            PK_B_2            PK_C_2
PK_A_1            PK_B_3            PK_C_3
PK_A_1            Null              PK_C_4
PK_A_1            Null              PK_C_5
PK_A_2            PK_B_1            PK_C_1
PK_A_2            PK_B_2            Null

Я думаю, что моя проблема довольно проста, но я не смог найти решениепочти 12 часов размышлений.Я работаю с MS Access, VBA не будет проблемой, но мне нужен SQL для производительности.Есть миллион строк.Я просто хочу повесить два списка на один ключ другого списка

1 Ответ

0 голосов
/ 07 июня 2018

Это нелепо сложно в MS Access, хотя и не так сложно в других базах данных.

Что вам нужно сделать, это перечислить значения, а затем join.Перечисление можно выполнить с помощью подзапросов.

select pk_a,
       max(pk_b) as pk_b,
       max(pk_c) as pk_c
from ((select b.pk_a, b.pk_b, NULL as pk_c
              (select count(*)
               from b as b2
               where b2.pk_a = b.pk_a and b2.pk_b <= b.pk_b
             ) as seqnum
       from b
      )
      union all
      (select c.pk_a, NULL as pk_b, NULL as pk_c
              (select count(*)
               from c as c2
               where c2.pk_a = c.pk_a and c2.pk_x <= c.pk_c
             ) as seqnum
       from c
      )
     ) bc
group by pk_a, seqnum;

Обратите внимание, что столбцы, называемые «pk», показывают отсутствие понимания реляционных баз данных.Первичные ключи не имеют дубликатов в своей первичной таблице.

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