次のテーブルがあります:tPlans、tPlansProperties、tProperties、tEventsProperties、tEvents。
これらのテーブルの場合、tPlansとtPropertiesの間には多対多の関係があります。tEventsとtPropertiesの間にも多対多の関係があります。
tPlansとすべて同じtPropertiesを持つすべてのtEventsを取得しようとしていますが、PlansとEventsの両方にプロパティが1つでもあると、結果としてそれが表示されるというジレンマに直面しています。さまざまなタイプのプロパティをすべてハードコーディングしたり、クエリされた結果を後処理したりせずに、これを実現する必要があります。
これが私がこれまでに持っているものです:
SELECT
P1.id
,P1.name
,E1.property
,E1.id
,E1.name
FROM (
SELECT
P.id
, P.name
, PP.property
FROM tPlans P
INNER JOIN tPlansProperties PP
ON P.id = PP.id
) P1
INNER JOIN (
SELECT
E.id
, E.name
, EP.property
FROM tEvents E
INNER JOIN tEventsProperties EP
ON E.id = EP.id
WHERE E.id LIKE 'EVT2011SC99'
) E1
ON P1.property = E1.property
これがテーブルの概要です。
tPlans
id、name、type、cost、vendor_id
tPlansProperties
id、property
tProperties
プロパティ、property_name、property_type
tEventsProperties
id、property
tEvents
id、name、description、date、owner_id