私はこのモデルを持っています。
旅行には、TripPassenger を通じて多くの乗客がいます
TripPassenger は Trip に属します
TripPassenger は User に属します
ユーザー
乗客 X が乗客 Y と一緒に行ったすべての乗車を取得するにはどうすればよいですか?
私はこのモデルを持っています。
旅行には、TripPassenger を通じて多くの乗客がいます
TripPassenger は Trip に属します
TripPassenger は User に属します
ユーザー
乗客 X が乗客 Y と一緒に行ったすべての乗車を取得するにはどうすればよいですか?
1 つの解決策は、自己結合です。
select tp1.TripId
from TripPassenger tp1
join TripPassenger tp2
on tp1.UserId = X
and tp2.UserId = Y
and tp1.TripId = tp2.TripId
select trip_id
from trip_passenger
where passenger_id in (1,2)
group by trip_id
having count(*) = 2;
これにより、正確にその 2 人の乗客が参加した旅行が返されます。他の乗客も参加した場合は、 を使用する必要がありますcount(*) >= 2
。
また、乗客が同じ旅行に 2 回割り当てられることはないと仮定します。
SELECT TripID
FROM TripPassenger
WHERE User = @User1
AND TripID IN (
SELECT TripID
FROM TripPassenger
WHERE User = @User2
)