MYSQL INNER JOIN FUNCTION ERROR SELECT列表的表达式#2不在GROUP BY子句中

问题描述 投票:0回答:1

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

我有大约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个回答
1
投票

子查询是你的问题。

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

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

  • 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和/或你的子查询的意图。

© www.soinside.com 2019 - 2024. All rights reserved.