我希望将一个表中的值插入另一个表中。
我有大约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 <> “"
子查询是你的问题。
SELECT formId, L1A, L1B, L1C, MAX(entryID) AS MaxEntryId FROM preferences GROUP BY formId
根据您自己的错误消息,SELECT
中提到的每个字段必须是聚合函数(例如您使用MAX()
的地方),或者在GROUP BY
中提及。
L1A, L1B, L1C
不是聚合物或GROUP BY
您需要类似以下内容之一:
SELECT formId, L1A, L1B, L1C, MAX(entryID) AS MaxEntryId FROM preferences GROUP BY formId
, L1A, L1B, L1C
SELECT formId,
MAX(L1A) AS L1A, MAX(L1B) AS L1B, MAX(L1C) AS L1C
, MAX(entryID) AS MaxEntryId FROM preferences GROUP BY formId
你所需要的正是你无法分辨的,因为你没有告诉我们关于表preferences
和/或你的子查询的意图。