Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 分组函数的使用无效,但没有分组依据_Mysql_Group By - Fatal编程技术网

Mysql 分组函数的使用无效,但没有分组依据

Mysql 分组函数的使用无效,但没有分组依据,mysql,group-by,Mysql,Group By,我正在尝试运行此查询: UPDATE `ps_category_lang` cl LEFT JOIN ps_product_shop p ON cl.id_category=p.id_category_default AND cl.id_shop=p.id_shop AND p.available_for_order =1 AND p.visibility != 'none' LEFT JOIN ps_specific_price sp

我正在尝试运行此查询:

UPDATE `ps_category_lang` cl 
  LEFT JOIN ps_product_shop p 
    ON cl.id_category=p.id_category_default 
     AND cl.id_shop=p.id_shop 
     AND p.available_for_order =1 
     AND p.visibility != 'none' 
  LEFT JOIN ps_specific_price sp 
    ON p.id_product=sp.id_product 
    AND ((sp.`from` = '0000-00-00 00:00:00' OR NOW() >= sp.`from`) 
    AND (sp.`to` = '0000-00-00 00:00:00' OR NOW() <= sp.`to`)) 
    AND (sp.id_shop=0 OR sp.id_shop=p.id_shop)
  SET cl.meta_title=CONCAT(
    SUBSTRING_INDEX(
      TRIM(cl.`meta_title`),
      'från', 
      1
    ), 
    'från ', 
    FORMAT(
      ROUND(
        min(p.price-IF(sp.reduction>0,sp.reduction, 0)
      ) * 
      (SELECT conversion_rate 
         FROM ps_currency 
         WHERE iso_code='SEK' 
           AND deleted=0
      )
    ),
    0, 
   'sv_SE'),
   ' kr.',
   SUBSTRING_INDEX(cl.`meta_title`, ' kr.', -1)
   )
   WHERE cl.`id_lang` = 7 
     AND cl.meta_title LIKE '% från%' 
     AND cl.meta_title LIKE '% kr.%' 
     AND p.available_for_order= 1 

但它给出了错误“1111-无效使用组函数”,尽管没有分组依据。为什么会出现此错误?

您不能在更新查询中直接使用聚合函数,并且任何在您的查询中使用聚合函数(如min)的查询都会通过添加得到一个隐式组

如果在不包含group BY的语句中使用group函数 子句,它相当于对所有行进行分组

把它简化为一个简单的例子:

更新_表集合值=最小值

将生成“错误1111 HY000:组函数的使用无效”

要实现该查询的目的,您需要这样做:

更新表格集合值=从表格中选择最小值


这意味着您的错误源是查询的这个特定部分,minp.price IFsp.reduce>0,sp.reduce,0,为了修复它,您需要将其转换为一个子查询,为您计算值。

通过使用以下临时表来解决此问题:

CREATE TEMPORARY TABLE tmp SELECT id_category_default, MIN(p.price-IF(sp.reduction>0,sp.reduction, 0)) AS minprice FROM ps_product_shop p LEFT JOIN ps_specific_price sp ON p.id_product=sp.id_product AND ((sp.`from` = '0000-00-00 00:00:00' OR NOW() >= sp.`from`) AND (sp.`to` = '0000-00-00 00:00:00' OR NOW() <= sp.`to`)) AND (sp.id_shop=0 OR sp.id_shop=p.id_shop) WHERE p.available_for_order= 1 GROUP BY p.id_category_default;
UPDATE `ps_category_lang` cl LEFT JOIN ps_product_shop p ON cl.id_category=p.id_category_default AND cl.id_shop=p.id_shop AND p.available_for_order =1 AND p.visibility != 'none' LEFT JOIN ps_specific_price sp ON p.id_product=sp.id_product AND ((sp.`from` = '0000-00-00 00:00:00' OR NOW() >= sp.`from`) AND (sp.`to` = '0000-00-00 00:00:00' OR NOW() <= sp.`to`)) AND (sp.id_shop=0 OR sp.id_shop=p.id_shop) LEFT JOIN tmp t on t.id_category_default=p.id_category_default AND t.minprice is not null
SET cl.meta_title=CONCAT(SUBSTRING_INDEX(TRIM(cl.`meta_title`),'från', 1), 'från ',FORMAT(ROUND(t.minprice)*(SELECT conversion_rate FROM ps_currency WHERE iso_code='SEK' AND deleted=0),0, 'sv_SE'),' kr.',SUBSTRING_INDEX(cl.`meta_title`, ' kr.', -1))
WHERE cl.`id_lang` = 7 AND cl.meta_title LIKE '% från%' AND cl.meta_title LIKE '% kr.%' AND p.available_for_order= 1 ;
DROP TEMPORARY TABLE tmp

您的意思是我需要为值创建此字段,还是它是临时值,因为表中没有此类字段。在这里,我很难将“更新_表集合值=从_表中选择最小值”放在正确的位置。你介意把它插对吗?非常感谢。对不起,我的回答只是一个一般性的解决方案-你能解释一下为什么要使用minp.price。。。首先,我用临时表解决了这个问题。此查询的目的是更新商店类别元标题,以便访问者可以立即看到所选类别中的最低价格。非常感谢,在你为我指出之前,我不知道该去哪里看。你可以直接将子查询放到主查询中,而不是临时表中。你也可以考虑让它成为一个视图,所以它总是可用的。