的問題是,你有where
子句中聚合函數:
SELECT `f`.`FormID`, `f`.`FormName`, `f`.`FormCIPath`, MIN(g.IsMenuLink) AS IsMenuLink,
GROUP_CONCAT(DISTINCT g.GroupID ORDER BY g.GroupID) AS GroupIDs
FROM (`sys_forms` f) INNER JOIN
`sys_forms_in_groups` g
ON `g`.`FormID` = `f`.`FormID`
WHERE `g`.`GroupID` IN ('1', '1') AND
(UPPER(f.FormName) LIKE '%DA%' OR
UPPER(f.FormCIPath) LIKE '%DA%' OR
UPPER(MIN(g.IsMenuLink)) LIKE '%DA%'
--------------^
)
GROUP BY `f`.`formID`
LIMIT 25;
可以直接刪除的功能,我想:
WHERE `g`.`GroupID` IN ('1', '1') AND
(UPPER(f.FormName) LIKE '%DA%' OR
UPPER(f.FormCIPath) LIKE '%DA%' OR
UPPER(g.IsMenuLink) LIKE '%DA%'
)
或將其移動到having
條款。
SELECT `f`.`FormID`, `f`.`FormName`, `f`.`FormCIPath`, MIN(g.IsMenuLink) AS IsMenuLink,
GROUP_CONCAT(DISTINCT g.GroupID ORDER BY g.GroupID) AS GroupIDs
FROM (`sys_forms` f) INNER JOIN
`sys_forms_in_groups` g
ON `g`.`FormID` = `f`.`FormID`
WHERE `g`.`GroupID` IN ('1', '1') AND
(UPPER(f.FormName) LIKE '%DA%' OR
UPPER(f.FormCIPath) LIKE '%DA%'
)
GROUP BY `f`.`formID`
HAVING UPPER(MIN(g.IsMenuLink)) LIKE '%DA%'
LIMIT 25;
只是一個方面說明:請注意,LIMIT爲您提供了25個隨機表單,因爲您不使用ORDER BY子句。 – 2014-10-08 10:51:23
哦,醜。你不能以這種方式使用MIN(WHERE MIN()),雖然你可以使用HAVING isntead - 但你究竟在做什麼?你確定你正在使用區分大小寫的排序規則!?!? – Strawberry 2014-10-08 11:21:33
@ThorstenKettner GROUP BY建立了一個隱含的(和一致的)命令 – Strawberry 2014-10-08 11:24:03