我在JOIN语句中放置了一个相当简单的子查询。它只适用于在子查询选择中包含*的情况。为什么?MySQL左加入子查询使用*
这工作
$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';
应我甚至可以做这种方式?如果你不需要所有的领域,我认为*是不是最好的?
当您仅从子查询中选择一个字段时,您的问题是您无法执行联接语句,因为如果您仅选择了type_id,则子查询不提供hours.location_id。 – Ashalynd
这是有道理的。我猜想很明显。无论如何,这工作。谢谢。 – MAZUMA
另外检查你是否真的需要使用(在第二种情况下)左连接而不是JOIN。如果你不想NULL type_id,那么我假设你可能真的想运行一个JOIN(通常更快)。 – Ashalynd