我在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