【发布时间】: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 <> “"
【问题讨论】:
-
如果
formId是您的主键,您可以使用 formID -
请阅读dev.mysql.com/doc/refman/5-fill.7/en/group-by-handling.html,尤其是与only_full_group_by相关的部分