Si vous ajoutez
SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY';
Ensuite, vous verrez pourquoi d'autres SGBDR n'autorisent pas cette syntaxe :
- 3 colonnes non agrégées dans SELECT mais une dans GROUP BY
- La colonne ORDER BY n'est pas dans GROUP BY/SELECT et n'est pas agrégée
Si vous voulez GROUP BY plutôt que DISTINCT, alors vous devez GROUP BY all dans la colonne SELECT
SELECT s.serviceid, s.servicenameit, s.servicenameen
FROM services s, kpi k, checklist_has_kpi chk
WHERE s.serviceid=k.serviceid AND k.kpiid=chk.kpiid AND k.inreport='yes' AND chk.checklistid=61
GROUP BY s.serviceid, s.servicenameit, s.servicenameen
Mais alors vous n'avez pas de chk.order
pour trier par, que vous utilisiez GROUP BY ou DISTINCT
Alors qu'en est-il d'ignorer complètement les doublons ?
SELECT s.serviceid, s.servicenameit, s.servicenameen
FROM services s, kpi k, checklist_has_kpi chk
WHERE s.serviceid=k.serviceid AND k.kpiid=chk.kpiid AND k.inreport='yes' AND chk.checklistid=61
ORDER BY chk.order ASC
Ou ceci pour COMMANDER PAR la première commande par 3x services
colonnes
SELECT s.serviceid, s.servicenameit, s.servicenameen
FROM services s, kpi k, checklist_has_kpi chk
WHERE s.serviceid=k.serviceid AND k.kpiid=chk.kpiid AND k.inreport='yes' AND chk.checklistid=61
GROUP BY s.serviceid, s.servicenameit, s.servicenameen
ORDER BY MIN(chk.order)