как объединить 2 таблицы с разными идентификаторами - PullRequest
0 голосов
/ 22 января 2020

Я попал в странный контекст, в котором

TableA
ID Field2 field3
1  Test1  IDB1
1  test1  IDB2
2  Test2  IDB3

TableB
ID Field2      field3
1  otherTest1  IDC1
1  othertest1  IDC2
2  otherTest2  IDC3

для каждого IDB у нас есть идентификатор C. IDB и ID C различны, но число одинаково, в настоящее время единственная связь с ID. как я могу присоединиться / вставить эти таблицы? если я попытаюсь объединить, очевидно, что он «продублирует» строки, потому что IDB и ID C различаются

объединение будет выглядеть так:

TableC
ID Field2 field3
1  IDB1  IDC1
1  IDB1  IDC2
2  IDB2  IDC3

что я хочу выполнить sh is:

TableC
ID Field2 field3
1  IDB1  IDC1
1  IDB2  IDC2
2  IDB3  IDC3
3  IDB4  IDC4
3  IDB5  IDC5
4  IDB6  IDC6

Ответы [ 3 ]

1 голос
/ 22 января 2020

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

SELECT DISTINCT
a.fields, b.fields -- just don't use the id
FROM
tableA AS a
INNER JOIN
tableB AS b
ON
b.commonId = a.commonId
0 голосов
/ 22 января 2020

один сотрудник предложил это:

SELECT DISTINCT
    a.id, a.IDB, b.IDC
FROM
    tableA AS a
INNER JOIN
    tableB AS b
ON
    a.id = b.id

результат равен

ID Field2 field3
1  IDB1  IDC1
1  IDB2  IDC2
2  IDB3  IDC3
3  IDB4  IDC4
3  IDB5  IDC5
4  IDB6  IDC6
0 голосов
/ 22 января 2020

Хммм, вы, кажется, хотите union all с некоторой арифметикой c на id:

select a.id, a.field2, a.field3
from tableA a
union all
select a.max_id + b.id, b.field2, b.field3
from tableB cross join
     (select max(a2.id) as max_id from tableA a2) a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...