Объединить две таблицы без первичного ключа, но с одинаковым количеством строк

У меня есть две таблицы, выглядящие так. "Value1" - это что-то вроде 2-го ключа, ID + Value1 = "Первичный" ключ, но его нет в настройке таблицы, а поле Value1 отсутствует во 2-й таблице, поэтому я не могу присоединиться к нему.

Но первая и вторая таблицы всегда имеют одинаковое количество строк и одинаковый порядок!

Таблица 1:

ID    Value1   Value2
10    1        100
10    2        200
20    1        250
30    1        150
30    2        125

Таблица 2:

ID   Value 3
10   50
10   60
20   70
30   80
30   25

В результате я хочу, чтобы 2-я таблица была объединена с первой:

ID   Value1   Value2   Value3
10   1        100      50
10   2        200      60
20   1        250      70
30   1        150      80
30   2        125      25

Как это сделать в SQL? Возможно ли это с помощью простого объединения / объединения, без создания новых таблиц или чего-то еще?

3 ответа

В TSQL вы можете написать как:

;with CTEtab1 as
(select 
 ID,
 Value1,
 Value2,
 row_number() over (order by Id asc) as rownum
 from tab1)
  ,CTEtab2 as
 (select 
 ID,
 Value3,
 row_number() over (order by Id asc) as rownum
 from tab2)
 select T1.Id,T1.Value1,T1.Value2,T2.Value3 
 from 
 CTEtab1 T1
 join CTEtab2 T2 
 on T1.rownum=T2.rownum

демонстрация

В общем, при отсутствии колонки JOIN путем, вы не можете просто объединить две таблицы вместе. Несмотря на то, что в обеих таблицах одинаковое количество записей и они выглядят упорядоченными, на практике большинство СУБД не дает никаких гарантий относительно порядка, в котором каждая запись будет либо сохранена, либо выбрана.

Вы должны переосмыслить дизайн вашей базы данных и включить первичный / внешний ключ в 2 таблицы.

Вы можете сделать это с помощью простого оператора соединения

SELECT table1.ID, table1.Value1, table1.Value2, table2.Value3
FROM table1
INNER JOIN table2
ON table1.ID = table2.ID;

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

Другие вопросы по тегам