MySQL の SELECT クエリで少し問題が発生しています。いくつかのポインタに感謝します。既存の回答を教えてください(回答があり、それを見逃した場合)。
クエリは現在次のとおりです。
SELECT e.*, ie.aaa, ue.bbb, ue.ccc
FROM ie
LEFT JOIN e ON ie.e_id = e.e_id
LEFT JOIN ue ON ie.e_id = ue.e_id
WHERE ie.other_id = ? AND ue.unrelated_id = ?
ORDER BY ...
eとueの3 つのテーブルがあります。
テーブルieとueはeの関係であるため、外部キー (e_id) を含みます。? 入力パラメータを表します。
問題はue.unrelated_id = ? 部。ここで本当にやろうとしていることは次のとおりです。
- unrelated_id = ? の ue 関係がある場合にのみ ue.ccc を返します。存在しない場合は、このフィールドを null にします。
- unrelated_id = ? 存在しない場合、このクエリは常に残りのフィールドを返す必要があります (つまり、other_id = ? に対して存在することが保証されています)。
残念ながら、この where 句を削除すると、「ランダムな」unrelated_id の ue.ccc が取得されます。しかし、そのままにしておくと、この unrelated_id の ue が存在しない場合、クエリはまったく結果を返しません。OR ue.unrelated_id IS NOT NULL も追加しようとしましたが、これにより、ue テーブルが空の場合、クエリは結果を返しません。
何か案は?さらに明確にする必要がある場合は、コメントを残してください。数時間以内に迅速に回答する必要があります。