質問: employees.id; ``` 上記は、先に「今日」で絞り込みした予定と、 社員マスタを結合させ出力出来ました。 ですが、しっくり来てません。。。 こういう場合どういった記述がより適切でしょうか? どうぞ宜しくお願い致します。
回答: コードの見た目の好みの問題になるのじゃないでしょうか? 個人的にはサブクエリの中に条件があったほうが、それを条件に絞り込んだデータをjoinしているって(人間が)分かりやすくて好きではあります。 ※多分オプティマイザもそのロジックで実行すると思います。日付にindexがあると特に。 ※ただ、もしplan全件に対して日付とidをチェックしながらjoinしたほうが効率の良いロジックが存在した場合、サブクエリの中に書くとそれが選択肢に上がらない可能性が高いので正しいのは外に出すほうかも それよりも、同じ日に同じ人が複数planを入れていると同じ人の列が2件以上出力されますが、それは大丈夫なのですか? 以下はあまり洗練されているとは言えないロジック&コードですが、適当に(!?)1件のplanタイトルを出力して、複数ある場合は他に何件あるのかを出力した例 (動作テストはしていません) ``` SELECT emp_name, plan, n FROM employees LEFT OUTER JOIN ( SELECT MAX(plan) AS plan , CASE(WHEN COUNT(*)>1 THEN '他'||COUNT(*)-1||'件' ELSE '' END) AS n FROM plans WHERE plan_date='2017-05-28' GROUP BY plan, plan_date ) AS P ON P.employee_id = employees.id; ```