我希望将一个表中的值插入到另一个表中。
我有大约 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 <> “"
最佳答案
子查询是你的问题。
从首选项 GROUP BY formId 中选择 formId、L1A、L1B、L1C、MAX(entryID) AS MaxEntryId
根据您自己的错误消息,SELECT
中提到的每个字段都必须位于聚合函数中(例如您使用 MAX()
的位置) ,或在GROUP BY
中提及。
L1A、L1B、L1C
不在聚合中,也不在GROUP BY
中
您需要类似以下内容之一:
从首选项 GROUP BY formId 中选择 formId、L1A、L1B、L1C、MAX(entryID) AS MaxEntryId
、L1A、L1B、L1C
SELECT formId,
MAX(L1A) AS L1A、MAX(L1B) AS L1B、MAX(L1C) AS L1C
, MAX(entryID) AS MaxEntryId FROM 首选项 GROUP BY formId
无法确切地告诉我们您需要什么,因为您没有告诉我们有关表首选项
和/或您的子查询要做什么的信息。
关于MYSQL INNER JOIN FUNCTION ERROR SELECT 列表的表达式 #2 不在 GROUP BY 子句中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48033087/