MySQL左连接子查询*

MAZ*_*UMA 10 mysql select subquery left-join

我在JOIN语句中使用子查询组合了一个相当简单的查询.它仅在我在子查询select中包含*时才有效.为什么?

这有效

$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';
Run Code Online (Sandbox Code Playgroud)

事实并非如此

$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';
Run Code Online (Sandbox Code Playgroud)

我应该这样做吗?如果你不需要所有领域,我认为*不是最好的?

Ash*_*ynd 38

试试这个(如果我理解你的意图正确,你想要在type_id上​​过滤非空):

$sql = 'SELECT locations.id, title, name, hours.lobby
        FROM locations
        LEFT JOIN states ON states.id = locations.state_id
        LEFT JOIN (SELECT location_id, type_id AS lobby FROM location_hours 
        WHERE type_id IS NOT NULL) AS hours ON locations.id = hours.location_id
        GROUP BY locations.id';
Run Code Online (Sandbox Code Playgroud)

解释是您必须在内部查询中选择外部查询中引用的所有字段.