Sto mettendo insieme una query abbastanza semplice con una sottoquery nell'istruzione JOIN. Funziona solo se includo un * nella selezione sottoquery. Perché?MySQL Left Join Subquery con *
Questo funziona
$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';
Questo non
$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';
Dovrei anche essere farlo in questo modo? Pensavo che * non fosse il massimo se non avessi bisogno di tutti i campi?
il tuo problema quando hai selezionato un solo campo dalla subquery era che non potevi fare l'istruzione join, perché hours.location_id non è stato fornito da una sottoquery se hai selezionato solo id_tipo. – Ashalynd
Questo ha senso. E piuttosto ovvio, suppongo. Comunque questo funziona. Grazie. – MAZUMA
Controlla anche se hai davvero bisogno di usare (nel secondo caso) LEFT JOIN invece di JOIN. Se non vuoi NULL type_id, allora presumo che potresti voler eseguire un JOIN (che di solito è più veloce). – Ashalynd