【问题标题】:SELECT list is not in GROUP BY clause and contains nonaggregated column? [duplicate]SELECT 列表不在 GROUP BY 子句中并且包含非聚合列? [复制]
【发布时间】:2019-10-02 15:32:26
【问题描述】:

我已经编写了一些本地主机支持的查询,但是当我上传到我的服务器时,它在我的查询中显示了一些错误。

我的查询

 $query= $this->db->query("SELECT i.`Repay_id`, 
  COALESCE(SUM(`Amount`) ,0)    AS Amount
    ,p.`RLAmt` AS RLAmt,
    s.`TAmt` as TAmt,
    r.`PName` as TName,
    s.`TMode` as TMode,
    s.`TDate` as TDate,
    s.`TDAmt` as TDAmt,
    r.`Phone` as Phone,
    s.`TAcNo` as TAcNo

FROM  repay_schedule i
LEFT  JOIN (
   SELECT TName, TAmt,TAcNo,TMode,TDate,TDAmt
   FROM   tipup_payment  
    ) s ON s.`TAcNo` = i.`Repay_id`
LEFT  JOIN (
   SELECT Phone,PName,Area,pcode
   FROM   parmaster
    ) r ON r.`pcode` = s.`TName`
LEFT  JOIN (
SELECT TRAcNo, COALESCE(SUM(`RLAmt`) ,0) AS RLAmt,TRBAmt FROM   tipup_receipt GROUP  BY TRAcNo
     ORDER BY TRid DESC
   ) p ON p.`TRAcNo` = s.`TAcNo`
    WHERE  `Date` <='$newDate2' 
   GROUP BY Repay_id");

我的错误

【问题讨论】:

标签: mysql


【解决方案1】:

如果你有足够的权限可以试试这个

set global sql_mode = 'NO_ENGINE_SUBSTITUTION';

但我认为这不是一个好的解决方案。

【讨论】:

  • 我在哪里设置的
  • @Jack 关闭设置是不是正确的解决方案!查询可能不会生成此错误消息,但结果可能不是您所期望的。
  • @jack,正如我所说的“但我不认为这是一个好的解决方案。”
【解决方案2】:

发生错误是因为您对“金额”(SUM(Amount)) 而非您使用的其他字段进行了聚合。

当您激活了“only_full_group_by”模式并且至少有一个聚合时,您需要对“group by”子句中未包含的所有字段进行聚合。

您可以对您使用的所有其他字段进行类似 min(), max(), sum(), ... 的聚合,也可以在 MySql 服务器上停用该模式。

【讨论】:

  • 如何关闭服务器模式
  • 您可以使用 mysql 控制台将其停用:SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));。如果您想永久禁用它,请在您的 MySql 配置中搜索,例如'/etc/mysql/my.cnf' 用于sql_mode = "...,only_full_group_by,..." 行并删除此模式。然后重启MySql服务。
  • 显示为拒绝访问
  • @Jack 关闭设置是不是正确的解决方案!查询可能不会生成此错误消息,但结果可能不是您所期望的。
  • okey shadow 那么解决方案是什么?
猜你喜欢
  • 2016-04-27
  • 1970-01-01
  • 2016-09-26
  • 2016-12-12
  • 2017-07-29
  • 2017-06-22
  • 1970-01-01
  • 2018-06-12
  • 2019-01-22
相关资源
最近更新 更多