Количество столбцов не соответствует количеству значений в строке 1 в MySQL - PullRequest
0 голосов
/ 12 января 2019

Я создал таблицу со следующим запросом:

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

Я понимаю, что не указал идентификатор в своем коде вставки, и причина этого в том, что я хочу, чтобы он заполнялся автоматически.

Как я могу изменить свой код запроса INSERT, чтобы сделать так ...

1 Ответ

0 голосов
/ 12 января 2019

У вас 13 столбцов в таблице, но только 11 в вашем выборе, поэтому вы получаете эту ошибку.

Но сначала, чтобы автоматически заполнить столбец id, необходимо объявить его как AUTO_INCREMENT. Вы можете изменить его с помощью команды ALTER TABLE:

ALTER TABLE dailydata CHANGE id id INT AUTO_INCREMENT PRIMARY KEY

Поскольку у вас есть значение по умолчанию для вашего столбца Timestamp, вам не нужно вставлять значение для этого.

Чтобы устранить ошибку, которую вы видите, вам нужно изменить запрос INSERT, чтобы он соответствовал количеству столбцов, вставляемых в данные, либо
(а) наименование колонок, которые вы вставляете; или
(б) вставка NULL значений для столбцов без значений (id и Timestamp)

например. (А)

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

например. (Б)

INSERT INTO dailydata
SELECT NULL AS id,
A.Date, A.EmpID, B.name, B.TeamName,
...
NULL AS Timestamp
FROM ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...