【发布时间】:2015-09-01 13:51:04
【问题描述】:
我有一个 12 列的空表(第一列是 ID AUTO_INCREMENT)。
我必须直接从给我 8 列的查询中填充此表。这是查询
INSERT INTO table_name
SELECT t.one,
ag.two AS two_name,
a.three,
a.four,
t.five,
s.six as six_name,
s.seven as seven_name,
s.eight as eight_name,
'-',
'-',
'-'
FROM table_t AS t
JOIN table_st AS st ON t.trip_id = st.trip_id
JOIN table_s AS s ON s.s_id = st.a_id
JOIN table_a AS a ON a.a_id = t.a_id
JOIN agency_group AS ag ON ag.id = t.a_id
WHERE
st.somefield = 1
ORDER BY t.somefield ASC
;
如果我单独运行这个子查询(没有INSERT INTO table_name)它工作正常。
当我完全像上面写的那样运行它以便将这些结果直接输入到表中时,我收到了这个错误:
1136 - 列计数与第 1 行的值计数不匹配
PS。所有列类型和名称都匹配。
有人可以用手指指出问题出在哪里吗?谢谢
【问题讨论】:
-
您可以跳过 ORDER BY,没有区别。
-
我推荐你使用这样的语法:
INSERT INTO table_name (col1, col2,...)指定目标表的列名。 -
感谢 Jarlh,实际上它有所不同,因为 't.somefield' 来自另一个表,而不是 'st.somefield'。我会稍微修改一下这个查询。
-
@StanislovasKalašnikovas 考虑到我的任务(直接从另一个查询填充表),您将如何编写它?请不要建议为每一列运行查询。对于数据库(10Gb)来说这是不可接受的
-
您只需要像在
SELECT子句中使用源表一样指定目标表的所有列名。INSERT INTO table_name (col1, col2,...coln) SELECT col1, col2,...coln FROM....