的问题是,你有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