私は次の問題を実行するための効率的な方法を見つけるのに苦労しています。
私は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
は私が持っている必要がある追加データ用です。
私の質問は:このクエリを(より効率的に)行う別の方法があるかどうか知りたいですか?(現在、パフォーマンス時間の問題がいくつかあります)