MySQL: JOIN с группировкой
С форума: "Необходимо сделать джоин таблицы по некоторым ключам, но из получившихся записей нужна только последняя запись. Как ограничить? Куда совать группировку поля?"
Да, порой появляется нужда из присоединяемой таблицы выбрать только уникальные строки. Для этого в MySQL существует такая конструкция:
Да, порой появляется нужда из присоединяемой таблицы выбрать только уникальные строки. Для этого в MySQL существует такая конструкция:
Ниже приведенные примеры не являются показателем хорошего стиля программирования, так как на больших объёмах данных mysql-сервер начнет тормозить и нервничать.
Оптимальное решение - это сделать несколько отдельных запросов, а потом обработать их своей софтверной логикой (C++, Perl, PHP, и т.д.)
Оптимальное решение - это сделать несколько отдельных запросов, а потом обработать их своей софтверной логикой (C++, Perl, PHP, и т.д.)
SELECT * FROM t1 LEFT JOIN (SELECT c1, MAX(c2) AS c2 FROM t2 GROUP BY c1) AS t2 ON t1.c1=t2.c1;
SELECT * FROM t1 LEFT JOIN (SELECT c1, SUM(c3) AS c3 FROM t2 GROUP BY c1 LIMIT 5) AS t2 ON t1.c1=t2.c1;
SELECT * FROM t1 LEFT JOIN (SELECT * FROM t2 GROUP BY c1) AS t2 ON t1.c1=t2.c1;Это простое вложение, но можно сделать и более сложное:
SELECT t1.*, t2.* FROM t1 JOIN ( SELECT * FROM ( SELECT *, MAX(date) AS date FROM t2 GROUP BY c1 ) AS t3 JOIN t4 ON t4.id=t3.id ) AS t5 ON t5.id=t1.id