【问题标题】:MYSQL INNER JOIN FUNCTION ERROR Expression #2 of SELECT list is not in GROUP BY clauseMYSQL INNER JOIN FUNCTION ERROR Expression #2 of SELECT list is not in GROUP BY 子句
【发布时间】:2017-12-30 10:33:22
【问题描述】:

我希望将一个表中的值插入到另一个表中。

我有大约 15,000 条记录,因此我担心查询运行并将相关记录插入新表所需的时间。为了减少它查询的数据量,我尝试包含一个 INNER JOIN 函数,将其限制为数据子集,但是遇到了很多麻烦。

整个表的查询的精简版本如下所示:

INSERT INTO logic (formId, A1Logic, date) 
SELECT formId, JSON_OBJECT("logic1",JSON_ARRAY(L1A,L1B,L1C)), "'+date+'"
FROM preferences 
WHERE L1A NOT LIKE "%Select question title%" AND L1A <> ""

当包含一个内部连接时,我认为它看起来像下面这样,但是我收到一个错误:SELECT 列表的表达式 #2 不在 GROUP BY 子句中并且包含非聚合列

INSERT INTO logic (formId, A1Logic, date)
SELECT a.formId, JSON_OBJECT("logic1",JSON_ARRAY(a.L1A,a.L1B,a.L1C)), "'+date+'" 
FROM preferences a
INNER JOIN (SELECT formId, L1A, L1B, L1C, MAX(entryID) AS MaxEntryId FROM preferences GROUP BY formId) b 
ON a.formId = b.formId AND a.entryID = b.MaxEntryId 
WHERE L1A NOT LIKE "%Select question title%" AND L1A <> “"

【问题讨论】:

标签: mysql sql


【解决方案1】:

子查询是你的问题。

  • SELECT formId, L1A, L1B, L1C, MAX(entryID) AS MaxEntryId FROM preferences GROUP BY formId


根据您自己的错误消息,SELECT 中提到的每个字段都必须在聚合函数中(例如您使用 MAX() 的地方),或者在 @987654324 中提到@。

  • L1A, L1B, L1C 不在聚合或 GROUP BY


您需要以下内容之一:

  1. SELECT formId, L1A, L1B, L1C, MAX(entryID) AS MaxEntryId FROM preferences GROUP BY formId, L1A, L1B, L1C
  2. SELECT formId,MAX(L1A) AS L1A, MAX(L1B) AS L1B, MAX(L1C) AS L1C, MAX(entryID) AS MaxEntryId FROM preferences GROUP BY formId

由于您没有告诉我们有关表 preferences 和/或您的子查询的用途,因此无法准确说出您需要什么。

【讨论】:

  • 谢谢你,MatBailie。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-13
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多