2014-10-08 83 views
0

我正在使用点燃的数据表。除了过滤器外,它工作正常。当我在它做搜索,我得到错误mysql |获取数据库错误,使用组函数无效

组功能

我得到错误的结果此查询的无效使用。

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 

查询有什么问题。

+0

只是一个方面说明:请注意,LIMIT为您提供了25个随机表单,因为您不使用ORDER BY子句。 – 2014-10-08 10:51:23

+0

哦,丑。你不能以这种方式使用MIN(WHERE MIN()),虽然你可以使用HAVING isntead - 但你究竟在做什么?你确定你正在使用区分大小写的排序规则!?!? – Strawberry 2014-10-08 11:21:33

+0

@ThorstenKettner GROUP BY建立了一个隐含的(和一致的)命令 – Strawberry 2014-10-08 11:24:03

回答

3

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

Thankyou先生的回复,让我检查查询中的更改以及查询是否有效。 – 2014-10-08 14:16:35

+0

非常感谢先生。有用。 – 2014-10-08 14:38:54