Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列计数与MySQL中第1行的值计数不匹配_Mysql_Sql - Fatal编程技术网

列计数与MySQL中第1行的值计数不匹配

列计数与MySQL中第1行的值计数不匹配,mysql,sql,Mysql,Sql,我已使用以下查询创建了一个表: CREATE TABLE `dailydata` ( `id` int(9) NOT NULL, `Date` varchar(100) NOT NULL, `EmpID` varchar(100) NOT NULL, `name` varchar(100) NOT NULL, `TeamName` varchar(100) NOT NULL, `acti

我已使用以下查询创建了一个表:

CREATE TABLE `dailydata` (
  `id`         int(9)         NOT NULL,
  `Date`       varchar(100)   NOT NULL,
  `EmpID`      varchar(100)   NOT NULL,
  `name`       varchar(100)   NOT NULL,
  `TeamName`   varchar(100)   NOT NULL,
  `active`     varchar(100)   NOT NULL,
  `idle`       double         NOT NULL,
  `Stime`      double         NOT NULL,
  `Etime`      varchar(100)   NOT NULL,
  `Inofficehr` decimal(20,2)  NOT NULL,
  `activehr`   double(19,2)   NOT NULL,
  `idlehr`     double(19,2)   NOT NULL,
  `Timestamp`  timestamp      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE 
   CURRENT_TIMESTAMP) ENGINE=InnoDB DEFAULT CHARSET=latin1;
为“id”列设置主键:

ALTER TABLE `dailydata`ADD PRIMARY KEY (`id`);
现在,我尝试使用以下代码插入数据:

INSERT INTO dailydata 
SELECT A.Date, A.EmpID, B.name, B.TeamName, 
SUM(CASE WHEN State = 'active' THEN A.MinutesatState ELSE 0 END) AS active,
SUM(CASE WHEN State = 'idle' THEN A.MinutesatState ELSE 0 END) AS idle,
Min(A.Statestarttime) AS Stime, MAX(A.StateEndtime) AS Etime,
ROUND((TIME_TO_SEC(MAX(A.StateEndtime))/60 - 
TIME_TO_SEC(MIN(A.StateStarttime))/60)/60,2) as Inofficehr, 
ROUND(SUM(CASE WHEN State = 'active' THEN A.MinutesatState ELSE 0 END)/60,2) 
AS activehr, 
ROUND(SUM(CASE WHEN State = 'idle' THEN A.MinutesatState ELSE 0 END)/60,2) 
AS idlehr 
FROM time A join ttld.login B on A.EmpID=B.username 
WHERE A.Date='01-01-2019' AND A.Statestarttime <>'' AND A.StateEndtime <>'' 
GROUP BY A.EmpID;
但我得到了一个错误:

1136-列计数与第1行的值计数不匹配

我知道我没有在插入代码中定义ID,原因是我想让它自动填充


如何修改插入查询代码以执行此操作

表中有13列,但select中只有11列,这就是为什么会出现此错误

但首先,要使id列自动填充,需要将其声明为自动增量。您可以使用以下命令进行更改:

因为时间戳列有一个默认值,所以不需要为此插入一个值

要解决看到的错误,您需要修改INSERT查询,使其与插入到数据中的列数相匹配 a命名要插入的列;或 b为没有值id和时间戳的列插入空值

e、 g.a

INSERT INTO dailydata (`Date`, `EmpID`, `name`, `TeamName`, `active`, `idle` ,`Stime`, `Etime`, `Inofficehr`, `activehr`, `idlehr`)
SELECT A.Date, A.EmpID, B.name, B.TeamName, 
...
e、 g.b

INSERT INTO dailydata
SELECT NULL AS id,
A.Date, A.EmpID, B.name, B.TeamName,
...
NULL AS Timestamp
FROM ...
在id列中添加自动增量,并在CREATE TABLE中包含主键定义,或在INSERT语句中为id赋值。ALTER TABLE dailydata Add primary key id;这样不行吗?我需要创建新表吗?这个方法在另一个表中起作用,我想了解为什么这个表不起作用。
INSERT INTO dailydata
SELECT NULL AS id,
A.Date, A.EmpID, B.name, B.TeamName,
...
NULL AS Timestamp
FROM ...