Wenn Sie zwei beliebige IDs benötigen, verwenden Sie min()
und max()
:
SELECT c.`cat_name` , min(id), max(id)
FROM `info` i INNER JOIN
`category` c
ON i.`cat_id` = c.`cat_id`
WHERE c.`cat_name` IS NOT NULL
GROUP BY c`.`cat_name`
ORDER BY c.`cat_name` ASC ;
Hinweis:Sie verwenden einen LEFT JOIN
und dann durch eine Spalte in der zweiten zu aggregieren Tisch. Dies ist normalerweise keine gute Idee, da Nichtübereinstimmungen alle in NULL
platziert werden Gruppe. Außerdem Ihr WHERE
-Klausel verwandelt den LEFT JOIN
zu einem INNER JOIN
wie auch immer, also habe ich das behoben. Das WHERE
-Klausel kann erforderlich sein oder nicht, je nachdem, ob cat_name
oder nicht ist immer NULL
.
Wenn Sie die beiden größten oder kleinsten haben möchten – und es ertragen können, sie in derselben Spalte zu haben:
SELECT c.`cat_name`,
substring_index(group_concat id order by id), ',', 2) as ids_2
FROM `info` i INNER JOIN
`category` c
ON i.`cat_id` = c.`cat_id`
WHERE c.`cat_name` IS NOT NULL
GROUP BY c`.`cat_name`
ORDER BY c.`cat_name` ASC ;