1064 (42000): у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB - PullRequest
0 голосов
/ 05 мая 2019
sql = "INSERT IGNORE INTO record1 (s_id,s_date,s_in_time,s_p) VALUES (%s,%s,%s,%s)"
       SELECT s_id, s_date, s_in_time, s_out_time, s_p 
       FROM staff_attendance 
       WHERE staff_attendance.s_id 
         AND staff_attendance.s_date != record.s_id 
         AND record.s_date 

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

Ответы [ 2 ]

0 голосов
/ 05 мая 2019

Во-первых, оператор values не требуется.

Во-вторых, у вас есть ссылка на таблицу record, которой не существует.

Я подозреваю, что вы не хотите дубликатов на s_id/s_date (хотя это предположение). Вы должны начать с уникального индекса / ограничения на то, что вы хотите. Итак, начнем с этого (если его не существует):

create index unq_record1_s_id_s_date on record1(s_id, s_date);

Тогда я бы порекомендовал on duplicate key update, а не insert ignore. Это позволяет оператору фиксировать другие типы ошибок:

insert into record1 (s_id, s_date, s_in_time, s_out_time, s_p)
    select sa.s_id, sa.s_date, sa.s_in_time, sa.s_out_time, sa.s_p 
    from staff_attendance sa
    on duplicate key update s_id = values(s_id);
0 голосов
/ 05 мая 2019

Если вы хотите выбрать вставку, вы должны использовать

  INSERT IGNORE INTO record1 (s_id,s_date,s_in_time,s_p) 
  SELECT s_id, s_date, s_in_time,  s_p 
  FROM staff_attendance 
  WHERE staff_attendance.s_id 
     AND staff_attendance.s_date != record.s_id 
      AND record.s_date 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...