Jeśli dodasz
SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY';
Wtedy zobaczysz, dlaczego inne RDBMS nie pozwalają na tę składnię:
- 3 niezagregowane kolumny w SELECT, ale jedna w GROUP BY
- Kolumna ORDER BY nie znajduje się w GROUP BY/SELECT i nie jest zagregowana
Jeśli chcesz GRUPOWAĆ WEDŁUG zamiast DISTINCT, musisz GRUPOWAĆ WEDŁUG wszystkich kolumn w WYBIERZ
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
Ale wtedy nie masz chk.order
zamówić przez, niezależnie od tego, czy używasz GROUP BY, czy DISTINCT
A co z tym, że całkowicie ignorujesz duplikaty?
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
Lub to, aby ZAMÓWIĆ WEDŁUG najwcześniejszego zamówienia za 3x services
kolumny
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)