Tôi đang đặt cùng một truy vấn khá đơn giản với truy vấn phụ trong câu lệnh JOIN. Nó chỉ hoạt động nếu tôi bao gồm một * trong truy vấn con chọn. Tại sao?MySQL Left Join Subquery với *
này hoạt động
$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';
này không
$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';
nên tôi thậm chí được làm việc đó theo cách này? Tôi nghĩ rằng * không phải là tốt nhất nếu bạn không cần tất cả các lĩnh vực?
vấn đề của bạn khi bạn chỉ chọn một trường từ truy vấn phụ của bạn là bạn không thể thực hiện câu lệnh nối, vì hours.location_id không được cung cấp bởi truy vấn con nếu bạn chỉ chọn type_id. – Ashalynd
Điều đó có ý nghĩa. Và rõ ràng là tôi cho là vậy. Dù sao thì nó cũng hoạt động. Cảm ơn bạn. – MAZUMA
Ngoài ra kiểm tra xem bạn có thực sự cần phải sử dụng (trong trường hợp thứ hai) LEFT JOIN thay vì JOIN. Nếu bạn không muốn NULL type_id sau đó tôi giả sử bạn thực sự có thể muốn chạy một JOIN (thường là nhanh hơn). – Ashalynd