JOIN ステートメントでサブクエリを使用して、かなり単純なクエリを作成しています。サブクエリの選択に * を含めた場合にのみ機能します。なんで?
これは機能します
$sql = 'SELECT locations.id, title, name, hours.lobby
FROM locations
LEFT JOIN states ON states.id = locations.state_id
LEFT JOIN (SELECT *, type_id IS NOT NULL AS lobby FROM location_hours) AS hours ON locations.id = hours.location_id
GROUP BY locations.id';
これはしません
$sql = 'SELECT locations.id, title, name, hours.lobby
FROM locations
LEFT JOIN states ON states.id = locations.state_id
LEFT JOIN (SELECT type_id IS NOT NULL AS lobby FROM location_hours) AS hours ON locations.id = hours.location_id
GROUP BY locations.id';
私もこのようにすべきですか?すべてのフィールドが必要ない場合、* は最適ではないと思いましたか?