【问题标题】:INSERT INTO SELECT mysql is trying to insert different data from the selected onesINSERT INTO SELECT mysql 正在尝试从选定的数据中插入不同的数据
【发布时间】:2015-03-28 03:01:07
【问题描述】:

我最近一直在搞乱 MySQL,我无法解决一个问题。

有 2 张桌子。

  • status_graf(id,date,time,在线玩家人数)
  • status_statistika(id,date,min,avg,max)

第一个是每 5 分钟存储一次在线玩家的数据,第二个是每日统计数据。它是分开的,所以当人们想查看上个月的最小、平均、最大在线玩家时,我不必进行疯狂的选择。

此查询有效,结果是一个日期尚未进入 status_statistika 的表。

SELECT date,MIN(playersonline),AVG(playersonline),MAX(playersonline)
    FROM status_graf
    按日期分组
    日期不在(
        选择日期
        FROM status_statistika
        按日期分组
    )

但是当我尝试这个时

插入到 status_statistika ( 选择日期,MIN(玩家线),AVG(玩家线),MAX(玩家线) FROM status_graf 按日期分组 日期不在( 选择日期 FROM status_statistika 按日期分组 ) );

没有。

使用 phpMyAdmin 4.3.8、MySQL 5.5.41 会引发错误 #1062 - 键“日期”的重复条目“2015-01-29”。

想法?

解决方案: 由于点约定不知何故不接受它,我不得不将一个表中的列“日期”重命名为“天”,然后它就起作用了

【问题讨论】:

    标签: mysql phpmyadmin


    【解决方案1】:
    INSERT INTO status_statistika (
        SELECT DISTINCT date,MIN(playersonline),AVG(playersonline),MAX(playersonline) 
        FROM status_graf 
        GROUP BY date 
        HAVING date NOT IN (
            SELECT date 
            FROM status_statistika 
            GROUP BY date
        )
        );
    

    注意'DISTINCT'

    【讨论】:

      【解决方案2】:

      看起来您在 status_statistika 表中的日期列上有唯一索引。

      【讨论】:

      • 是的,CREATE TABLE status_statistika( ... PRIMARY KEY (id), UNIQUE (date) );但为什么这是个问题?日期是独一无二的
      • 好的,问题出在命名上。太多次“约会”。当我删除唯一键时,它总是为每一行插入最新的日期——这违反了唯一的规则。谢谢大佬:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      相关资源
      最近更新 更多