#sql #join #random #sap #hana
#sql #Присоединиться #Случайный #хана
Вопрос:
Я хочу создать случайно выбранную таблицу с перекрестным соединением, которая автоматически увеличивает свой собственный идентификатор и присоединяется к нему. Допустим, мои таблицы выглядят следующим образом.
Человек
Firstname, Lastname
Hans | Müller
Joachim | Bugert
Address
City, Street, StreetNumber
Hamburg | Wandsbeckerstr. | 2
Berlin | Konradstraße | 13
Теперь я хочу объединить таблицы с автоматически сгенерированным идентификатором, и они должны быть выбраны случайным образом.
Итоговая таблица должна выглядеть следующим образом
ID,Firstname,Lastname, City, Street, StreetNumber
1 |Hans|Bugert|Berlin|Wandsbeckerstr|2
2|Joachim|Müller|Hamburg|Konradstraße | 13
Что я уже пробовал или использовал:
Здесь я автоматически генерирую идентификатор, в котором я хочу объединить таблицы на
select GENERATED_PERIOD_START as ID FROM SERIES_GENERATE_INTEGER(1,1,10)
Проблема в том, что перекрестное соединение и внутреннее соединение у меня не работают, потому что оно всегда объединяет все со всем или не объединяет с тем же идентификатором.
SELECT Person."Firstname", Person."Lastname", Address."City",Address."Street", Address."StreetNumber"
FROM
( select GENERATED_PERIOD_START as ID FROM SERIES_GENERATE_INTEGER(1,1,10)
) autoGenID
inner JOIN
(select "Firstname" ,"Lastname" FROM Person ORDER BY RAND()) Person
inner JOIN
(select "City", "Street", "StreetNumber", FROM Address ORDER BY RAND()) Address
JOIN ON autoGenID."ID"=?????
Вот моя проблема, я не могу просто выбрать случайные данные и выбрать их в моем автоматически сгенерированном идентификаторе.
Спасибо за вашу помощь или идеи, как это решить!
Ответ №1:
Я думаю, вы хотите:
SELECT p."Firstname", p."Lastname", a."City", a."Street", a."StreetNumber"
FROM (SELECT p.*,
ROW_NUMBER() OVER (ORDER BY RAND()) as seqnum
FROM Person p
) p JOIN
(SELECT a.*,
ROW_NUMBER() OVER (ORDER BY RAND()) as seqnum
FROM Address a
) a
ON p.seqnum = a.seqnum;
Комментарии:
1. @Schwenk amp; GordonLinoff Нет смысла рандомизировать оба ввода для объединения.
2. @philipxy . . . Это верно, но
seqnum
необходимо вычислять в обоих подзапросах, поэтому нет никакого вреда в рандомизации для обоих.