Можно ли как-нибудь привести таблицу FULL OUTER JOIN в соответствие с правильной записью? - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь объединить две таблицы, используя FULL OUTER JOIN, чтобы две таблицы имели разные строки данных, а столбцы между этими двумя таблицами одинаковы.

Таблица 2 FULL OUTER JOIN Таблица 1

Таблица 1

id имя Сумма платежа=== ======== =====================1 Джек 100002 мая 200003 Эми 30000

Таблица 2

id имя Сумма платежа AccountID=== ======== ==================== ============1 гнездо 10000 0000012 Эми 30000 000002

Вывод, который отображается после выполнения

id T1name T2name Сумма платежа AccountID=== ======== ======== ====================================знак равно1 Джек Джек 10000 0000012 мая Эми 20000 0000023 Эми 30000

Ожидаемый вывод

id T1name T2name Сумма платежа AccountID=== ======== ======== ====================================знак равно1 Джек Джек 10000 0000012 мая 200003 Эми Эми 30000 000002

Таблица заказа на сумму платежа.

Ответы [ 2 ]

3 голосов
/ 08 апреля 2019
CREATE TABLE #Table1
    ([id] varchar(2), [name] varchar(4), [Payment Amount] int)

INSERT INTO #Table1
    ([id], [name], [Payment Amount])
VALUES
    ('S1', 'Jack', 10000),
    ('S2', 'May', 20000),
    ('S3', 'Amy', 30000)

CREATE TABLE #Table2
    ([id] varchar(2), [name] varchar(4), [Payment Amount] int)
;     
INSERT INTO #Table2
    ([id], [name], [Payment Amount])
VALUES
    ('X1', 'Jack', 10000),
    ('X2', 'Amy', 30000)

select A.id,A.name T1name ,isnull(B.name,'') T2name,A.[Payment Amount] from #Table1 A  left join #Table2 B on A.name=B.name
and A.[Payment Amount]=B.[Payment Amount]

выход

id  T1name  T2name  Payment Amount
S1  Jack    Jack      10000
S2  May               20000
S3  Amy     Amy       30000
0 голосов
/ 08 апреля 2019

Вы всегда должны JOIN с первичным ключом (особенно ключами) или с уникальным ключом всегда. в противном случае вы получите повторяющиеся значения. Имя столбца может быть не уникальным, и вы получите декартово произведение. В вашем случае, чтобы получить желаемый результат, вы должны join on t1.name=t2.name

...