每项服务都有不同的KPI。这些KPI与表checklist_has_kpi中的字段顺序一起订购。 我想要一个按分配给KPI的订单排序的单独服务列表。
我有这个问题:
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 ORDER BY chk.order ASC
但是它没有产生我期望的结果,我不明白我写的查询中有什么问题。 帮帮我? 如果有什么不清楚,请问! 感谢
答案 0 :(得分:2)
如果你添加
SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY';
然后你会看到其他RDBMS不允许这种语法的原因:
如果你想要GROUP BY而不是DISTINCT,那么你需要SELECT中的GROUP BY所有列
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
但是,无论是使用GROUP BY还是DISTINCT,您都没有chk.order
订购
那么,完全忽略重复呢?
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
或者按照每3x services
列的最早订单排序
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)