2015-06-16 1 views
0

У меня есть две таблицы, похожие на эти. «Value1» - это что-то вроде второго ключа, ID + Value1 = «Первичный» ключ, но его нет в настройке таблицы и поле Value1 отсутствует во второй таблице, поэтому я не могу присоединиться к нему.объединить две таблицы без первичного ключа, но такое же количество строк

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

Таблица 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 

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

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? Возможно ли это с помощью простого объединения/объединения, без создания новых таблиц или чего-то еще?

+0

да. Это выглядит так. Количество строк и порядок данных всегда одинаковы, поэтому мне просто нужно как-то слить его. – user3733265

+1

Какой вкус SQL? MySQL? –

+0

Возможный дубликат [Как присоединиться к двум таблицам вместе с одинаковым количеством строк по их порядку] (http://stackoverflow.com/questions/793174/how-to-join-two-tables-together-with-same-number -of-rows-by-their-order) –

ответ

1

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

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

1

В 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 

Demo

0

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

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

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