Inner Join с похожими идентификаторами - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть две таблицы, скажем:

Table 1

id, name, place
1, a, b
2, c, d
3, e, f

Table 2

id,text
1, hello
1, bye
1, what
2, tired

Требуемый вывод

id, name, place, text
1, a, b, hello or bye or what (any one of the three)
2, c, d, tired

Я видел много сообщений, но не смог найти ничего похожего. Я новичок в SQL / Postgresql. Я делаю это в PostgreSQL.

Ответы [ 3 ]

3 голосов
/ 19 февраля 2020

Вы можете использовать DISTINCT ON здесь и произвольно просто взять алфавитно-нижний текст из второй таблицы:

SELECT DISTINCT ON (t1.id) t1.id, t1.name, t1.place, t2.text
FROM Table1 t1
INNER JOIN Table2 t2
    ON t1.id = t2.id
ORDER BY
    t1.id,
    t2.text;

screen capture from demo below

Демо

1 голос
/ 19 февраля 2020

Вы можете объединить несколько значений в массив и выбрать случайное значение (синтаксис postgres):

select t1.id, (array_agg(t2.text))[floor(random() * count(t2.text) + 1)::int]
from table1 t1
inner join table2 t2 on t1.id = t2.id
group by t1.id

Или немного быстрее, но выберет только первое значение:

select t1.id, (array_agg(t2.text))[1]
from table1 t1
inner join table2 t2 on t1.id = t2.id
group by t1.id
0 голосов
/ 19 февраля 2020

Вы бы написали что-то вроде

, выберите t1.id, имя, место, текст из table 1 как t1
, соедините table 2 как t2 на t2.id = t1.id сгруппировать по t1.id

...