我有以下表格:tPlans、tPlansProperties、tProperties、tEventsProperties、tEvents。
对于这些表,tPlans 和 tProperties 之间存在多对多关系。tEvents 和 tProperties 之间也存在多对多关系。
我正在尝试获取与 tPlans 具有所有相同 tProperties 的所有 tEvents,但我遇到了两难境地,如果计划和事件中甚至有一个属性,它会显示它作为结果。我需要在不对所有不同类型的属性进行硬编码或对查询结果进行后处理的情况下实现这一点。
这是我到目前为止所拥有的:
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
这是表格的高级视图:
计划
ID,名称,类型,成本,vendor_id
tPlansProperties
身份证,财产
t属性
属性,property_name,property_type
tEventsProperties
身份证,财产
事件
id、名称、描述、日期、owner_id