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

Ridurre al minimo le query SQL utilizzando il join con una relazione uno-a-molti

Puoi ottenere tutto in un'unica query con un semplice join, ad esempio:

SELECT   d.name AS 'department', p.name AS 'name'
FROM     department d
  LEFT JOIN people p ON p.department_id = d.id
ORDER BY department

Questo restituisce tutti i dati, ma è un po' una seccatura da consumare, dal momento che dovrai comunque scorrere ogni persona. Puoi andare oltre e raggrupparli insieme:

SELECT   d.name AS 'department',
         GROUP_CONCAT(p.name SEPARATOR ', ') AS 'name'
FROM     department d
  LEFT JOIN people p ON p.department_id = d.id
GROUP BY department

Otterrai qualcosa di simile come output:

department | name
-----------|----------------
sales      | Tom, Bill, Rachel
marketing  | Jessica, John