【问题标题】:MySQL. Populate table from results query where different number of columnsmysql。从不同列数的结果查询中填充表
【发布时间】: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....

标签: mysql sql


【解决方案1】:

在插入时始终列出列:

INSERT INTO table_name (col1, col2, . . ., coln)
    SELECT col1, col2, . . ., coln
    FROM . . .

错误信息很清楚。该表的列数比SELECT 多或少。

【讨论】:

  • 这也是正确的,就像 Stanislovas Kalašnikovas 写的一样。但是要非常清楚,请写出您的答案,例如( INSERT INTO table_name (col1, col2 ..., col8) SELECT col1,col2 ... , col8 ... ),因为这正是我做错的原因。当它被编辑时,我会接受它。谢谢
  • @AlexRos - 你到底想怎么编辑这个?似乎您是在要求他将其编辑为与现在相同的内容。
  • @Hogan 这个答案不准确。 Stanislovas Kalašnikovas 在上面的评论中给出了准确的答案。 INSERT INTO table_name (col1, col2,...coln) SELECT col1, col2,...coln FROM....
  • 啊,我明白了——你被缺少“coln”所困扰,好的改变了。
猜你喜欢
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
相关资源
最近更新 更多