SQL объединяет столбцы двух таблиц по уникальному ключу - PullRequest
0 голосов
/ 30 апреля 2019

Предположим, у меня есть две таблицы, A и B, обе с уникальным ключом, выглядящим следующим образом (в реальной таблице, конечно, больше строк и столбцов):

Unique_Key       A        B
____________________________
    ABC          1        2
    BCD          5        6
    DDD          10       11


 Unique_Key      C        D
____________________________
    ABC          6        7
    BCD          8        9
    DDD          100      200

Я хотел бы присоединитьсястолбцы двух таблиц на Unique_Key для получения следующего вывода:

Unique_Key       A        B         C         D
_________________________________________________
    ABC          1        2         6         7
    BCD          5        6         8         9
    DDD          10       11        100       200

Я пробовал это:

select 
    [A], [C]
from 
    tableA r with (nolock) join tableB l with (nolock) on r.Unique_Key = 
l.Unique_Key

Это работает так же, как объединяеттаблица, но она производит повторяющиеся строки, и я не уверен, почему.По сути, это то, чего я хочу избежать - иметь дублирующиеся строки.

Спасибо!

Ответы [ 4 ]

1 голос
/ 30 апреля 2019

вы можете использовать команду соединения, которая хорошо работает в этом случае.

SELECT A.Unique_Key, A.Atable_Column1, A.Atable_Column2, B.Btable_Column3, B.Btable_Column4 
From Table1 A  inner join Table2 B
 on A.Unique_Key = B.Unique_Key
0 голосов
/ 30 апреля 2019

Если unique_key действительно уникален в каждой таблице, тогда это будет делать то, что вы хотите, без создания дубликатов:

select r.unique_key, r.a, r.b, l.c, l.d
from tableA r join
     tableB l 
     on r.Unique_Key = l.Unique_Key;

Если вы получаете дубликаты, ваш ключ не уникален.Вы можете идентифицировать ключи с дубликатами, выполнив:

select unique_key
from tableA r
group by unique_key
having count(*) > 1;

и:

select unique_key
from tableB l
group by unique_key
having count(*) > 1;

Исходя из вашего выбора имен, вам, вероятно, потребуется исправить базовые данные.

0 голосов
/ 30 апреля 2019

Ни tableA.A, ни tableB.C не уникальны, или я так понимаю.

С

Unique_Key | A | B
-----------+---+--
AAA        | 1 | 1
BBB        | 1 | 2
CCC        | 2 | 3

и

Unique_Key | C | D
-----------+---+--
AAA        | 1 | 1
BBB        | 1 | 2
CCC        | 4 | 5

вы получите

A | C
--+--
1 | 1
1 | 1
2 | 4

где вы хотите

A | C
--+--
1 | 1
2 | 4

Используйте для этого DISTINCT:

select distinct tablea.a, tableb.c
from tablea 
join tableb on tablea.unique_key = tableb.unique_key;
0 голосов
/ 30 апреля 2019

Вы можете использовать группу с агрегацией

select 
    r.Unique_Key,max([A]), max([C])
from 
    tableA r join tableB l on r.Unique_Key = 
l.Unique_Key
group by r.Unique_Key
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...