【问题标题】:MySQL INSERT INTO statement generating "Error Code: 1136. Column count doesn't match value count at row"MySQL INSERT INTO 语句生成“错误代码:1136。列计数与行的值计数不匹配”
【发布时间】:2019-05-19 06:29:07
【问题描述】:

我正在尝试从旧表创建一个新表,以便删除一些重复项并实现复合主键。我已经使用 LIKE 从旧表创建了新表,因此列应该相同。

为什么这不起作用?

INSERT INTO PricesNEWtest (Global_MarketCap,pkey)
   VALUES ((SELECT max(Global_MarketCap), pkey
   FROM Prices GROUP BY pkey));

产生错误:

错误代码:1136。列计数与第 1 行的值计数不匹配


上面的例子只有两行所以更清晰,但实际上表格包含 15 列,这是完整的 INSERT INTO 语句,它会产生相同的错误:

INSERT INTO PricesNEWtest (Global_MarketCap,Global_Volume24h,BTC_Dominance,Rank,Name,
Symbol,ChangePerc24h,Price,BTC_Price,MarketCap,Volume24h,DateTime,Date,pkDummy,pkey)
VALUES ((SELECT max(Global_MarketCap), max(Global_Volume24h), max(BTC_Dominance), max(Rank), max(Name),
    max(Symbol), max(ChangePerc24h), max(Price), max(BTC_Price), max(MarketCap), max(Volume24h),
    max(DateTime), max(Date), max(pkDummy), pkey
    FROM Prices GROUP BY pkey));

我为 VALUES 添加了双括号,因为没有它我得到错误代码 1064,但我不完全理解为什么需要双括号。我按 pkey 字段(当前有一些我想删除的重复项)进行分组,这意味着我需要总结其余的字段。从屏幕截图中可以看出,SELECT 语句本身可以正常工作。

我可以尝试另一种方法吗?或者有没有更简单的方法可以直接从原始表中删除重复项?
我正在使用 MySQL 5.7.14

任何帮助将不胜感激!

【问题讨论】:

    标签: mysql sql sql-insert create-table insert-into


    【解决方案1】:

    您只是使用 SELECT 语句的 INSERT 语法错误:

    INSERT INTO PricesNEWtest (Global_MarketCap, pkey)
    SELECT max(Global_MarketCap), pkey
    FROM Prices 
    GROUP BY pkey
    

    【讨论】:

    • 这成功了,抱歉这个愚蠢的问题,SQL 中的所有语法差异都很难处理(即使在同一个 DBMS 中,也很令人沮丧......)
    猜你喜欢
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多