1064(42000):您的SQL语法错误;检查与您的MariaDB服务器版本相对应的手册

时间:2019-05-05 09:47:57

标签: sql mariadb

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 :(得分:0)

如果要插入选择,则应使用

  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 

答案 1 :(得分:0)

首先,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);
相关问题