2016-09-17 3 views
0

Предоставлено двух таблиц (count(Table1) <= count(Table2)):SQL - Объединить две таблицы без ключевого

Table1:

record-1 
record-2 
... 
record-k 

Table2:

promo-1 
promo-2 
... 
promo-j 

Можно ли объединить их в следующей таблице ? То есть присвойте каждой записи в Table1 некоторую запись в Table2, но что никакие две записи в Table1 не будут соответствовать той же записи в Table2.

Результат:

record-1 promo-i1 
record-2 promo-i2 
... 
record-n promo-in 
+0

По каким критериям вы хотите присоединиться к записям? Почему запись-2 присоединяется к promo-i2, а не, скажем, promo-i18? –

+0

@ThorstenKettner Нет критериев, записи в таблице 2 могут быть выбраны произвольно. – SlavaSt

ответ

4

Вы можете создать поддельный ключ, используя псевдо-столбец rownum, и присоединиться в соответствии с этим:

SELECT t1.col1, t2.col2 
FROM (SELECT col1, ROWNUM AS rn 
     FROM  table1 
     ORDER BY col1) t1 
JOIN (SELECT col2, ROWNUM AS rn 
     FROM  table2 
     ORDER BY col2) t2 ON t1.rn = t2.rn 

EDIT:
Немного "clunkier" , но еще более приемлемым для ANSI подходом было бы использовать оконную функцию ROW_NUMBER():

SELECT t1.col1, t2.col2 
FROM (SELECT col1, ROW_NUMBER() OVER (ORDER BY col1) AS rn 
     FROM  table1) t1 
JOIN (SELECT col2, ROW_NUMBER() OVER (ORDER BY col2) AS rn 
     FROM  table2) t2 ON t1.rn = t2.rn 
+0

Зачем нам нужен заказ по подзапросам? – SlavaSt

+0

Если записи для объединения могут быть выбраны произвольно, вам не требуется предложение order by. (Но я думаю, что для функции ROW_NUMBER это обязательно.) BTW: Если одна таблица может иметь больше записей, чем другая, и вы хотите видеть записи, для которых вы не находите пару, вы можете использовать внешнее соединение: 'from (select .. .) полное внешнее соединение (select ...) '. –

Смежные вопросы