Как я могу объединить несколько таблиц в одном автоматически сгенерированном целом числе из одной "таблицы"? - PullRequest
3 голосов
/ 02 апреля 2019

Я хочу создать случайно выбранную перекрестную таблицу, которая автоматически увеличивает свой собственный идентификатор и присоединяется к нему. Допустим, мои таблицы выглядят так.

лицо

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 Ответ

4 голосов
/ 02 апреля 2019

Я думаю, что вы хотите:

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;
...