我正在努力寻找有效的方法来执行以下问题。
我有 3 张桌子:
1) Events
tbl 保留以下数据:
2) Tasks
tbl 保留以下数据:
逻辑是:
- 许多任务可以分配给事件(但不一定事件有任务)
- 事件可以定义为阶段
- events.event_id 是 PK,tasks.RelatedGateID 是他的 FK
- tasks.taskID 是 PK
我想要一个查询,它将显示需要具有以下规则之一的事件列表:
事件是阶段或事件有任务(不必是阶段)
我目前的查询是:
SELECT DISTINCT * FROM
(
SELECT Event_ID FROM
(
SELECT
E.Event_ID
FROM
Events E
WHERE E.Event_IsPhase = 1
) ET UNION
(
SELECT
T.RelatedGateID
FROM
Tasks T
)
)AS tbl1 LEFT JOIN
Tasks AS tbl2 ON tbl1.Event_ID=tbl2.RelatedGateID
*最后一个LEFT JOIN
是我需要的其他数据。
我的问题是:我想知道是否有不同的方式来做这个查询(更有效)?(现在它有一些性能时间问题)