Хорошо, у меня просто возникла мысль, что, возможно, вы ищете события, где люди встречались друг с другом, то есть не события, в которых был только один человек (что было недостатком в моем предыдущем коде, см. Ниже).Это работает, чтобы найти только события, в которых приняли участие два человека:
select l.event_id, p.id as person_id, p.name as person_name, l.txn as txn_id
from people p
inner join list l
on p.id=l.person_id
inner join
(
select event_id, count(*) as headcount
from list
group by event_id
) x
on l.event_id=x.event_id
where x.headcount > 1
group by l.event_id, p.id, p.name
Старый ответ
Я думаю, вам нужно это:
select l.event_id, p.id as person_id, p.name as person_name, l.txn as txn_id
from people p
inner join list l
on p.id=l.person_id
group by l.event_id, p.id, p.name
Результат:
# event_id, person_id, person_name, txn_id
'A', '1', 'Alice', 'T1'
'A', '2', 'Bruce', 'T2'
'A', '3', 'Charlie', 'T3'
'A', '4', 'Dan', 'T4'
'B', '1', 'Alice', 'T5'
'B', '2', 'Bruce', 'T6'
'B', '5', 'Eric', 'T7'
'B', '6', 'Fannie', 'T8'
Я использовал имя столбца как «person_id» в таблице списка, чтобы избежать путаницы со столбцом «id» в таблице person.Кроме того, я полагаю, id - это первичный ключ, а автоматический идентификатор в таблице списка, а «person_id» - это внешний ключ, ссылающийся на идентификатор из таблицы person.