Mysql
 sql >> Database >  >> RDS >> Mysql

Come selezionare da due tabelle in MySQL anche se non tutte le righe in una tabella hanno corrispondenti nell'altra?

Per fare ciò è necessario un join esterno. A proposito, il modo in cui stai scrivendo la tua query con un join implicito è obsoleto e non è più consigliato. Si consiglia di utilizzare la parola chiave JOIN. In questo modo è anche più facile cambiare un join interno in un join esterno.

FROM categories AS sc
LEFT JOIN products AS s
ON s.ownerid=sc.id

Per restituire 0 invece di NULL, usa IFNULL(..., 0) . L'intera query diventa:

SELECT
    sc.*,
    IFNULL(MIN(s.price), 0) AS minp,
    IFNULL(MAX(s.price), 0) AS maxp
FROM categories AS sc
LEFT JOIN products AS s
ON s.ownerid = sc.id
GROUP BY sc.id

Potresti anche considerare se sarebbe meglio restituire il valore predefinito NULL invece di 0 per le categorie che non hanno prodotti.