mysql |获取数据库错误,组函数使用无效

mysql |获取数据库错误,组函数使用无效,mysql,sql,Mysql,Sql,我使用的是点燃的数据表。除了过滤器外,它工作正常。当我在里面搜索时,我得到了一个错误 组函数的使用无效 我在错误的结果中得到这个查询 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 J

我使用的是点燃的数据表。除了过滤器外,它工作正常。当我在里面搜索时,我得到了一个错误

组函数的使用无效

我在错误的结果中得到这个查询

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
子句中有聚合函数:

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%'
       )
或者将其移动到具有子句的

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;

问题在于,
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%'
       )
或者将其移动到具有
子句的

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;

问题在于,
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%'
       )
或者将其移动到具有
子句的

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;

问题在于,
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%'
       )
或者将其移动到具有
子句的

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个随机表单,因为您不使用ORDERBY子句。哦,太难看了。您不能以这种方式使用MIN(其中MIN()),尽管您可以使用isntead,但您实际上想做什么?您确定您使用的是区分大小写的排序规则吗@ThorstenKettner GROUP BY建立了一个隐式的(一致的)order@Strawberry:好的,这是MySQL中的特殊功能。在标准SQL中,您总是需要ORDER BY来保证排序顺序。@ThorstenKettner我对其他方言不太熟悉,但它似乎也能起到同样的作用。。。请注意:请注意,LIMIT会给您提供25个随机表单,因为您不使用ORDERBY子句。哦,太难看了。您不能以这种方式使用MIN(其中MIN()),尽管您可以使用isntead,但您实际上想做什么?您确定您使用的是区分大小写的排序规则吗@ThorstenKettner GROUP BY建立了一个隐式的(一致的)order@Strawberry:好的,这是MySQL中的特殊功能。在标准SQL中,您总是需要ORDER BY来保证排序顺序。@ThorstenKettner我对其他方言不太熟悉,但它似乎也能起到同样的作用。。。请注意:请注意,LIMIT会给您提供25个随机表单,因为您不使用ORDERBY子句。哦,太难看了。您不能以这种方式使用MIN(其中MIN()),尽管您可以使用isntead,但您实际上想做什么?您确定您使用的是区分大小写的排序规则吗@ThorstenKettner GROUP BY建立了一个隐式的(一致的)order@Strawberry:好的,这是MySQL中的特殊功能。在标准SQL中,您总是需要ORDER BY来保证排序顺序。@ThorstenKettner我对其他方言不太熟悉,但它似乎也能起到同样的作用。。。请注意:请注意,LIMIT会给您提供25个随机表单,因为您不使用ORDERBY子句。哦,太难看了。您不能以这种方式使用MIN(其中MIN()),尽管您可以使用isntead,但您实际上想做什么?您确定您使用的是区分大小写的排序规则吗@ThorstenKettner GROUP BY建立了一个隐式的(一致的)order@Strawberry:好的,这是MySQL中的特殊功能。在标准SQL中,您总是需要ORDER BY来保证排序顺序。@ThorstenKettner我对其他方言不太熟悉,但它似乎也能起到同样的作用。。。谢谢先生的回复,让我检查一下查询中的变化以及您的查询是否有效谢谢先生的回复,让我检查一下查询中的变化以及您的查询是否有效谢谢先生的回复,让我检查一下查询中的变化以及您的查询是否有效谢谢先生的回复,让我检查一下查询中的更改以及您的查询是否有效。。