Объединить две таблицы без первичного ключа, но с одинаковым количеством строк
У меня есть две таблицы, выглядящие так. "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;
хотя я бы по-прежнему предлагал изменить таблицы, чтобы они имели первичные и внешние ключи, которые правильно их связывают.