You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中带WHERE条件插入数组列表 解决MySQL 1064语法报错问题

错误原因

  • MySQL 8.0.19版本之前不支持在FROM子句中直接使用VALUES构造临时表,你原本的写法是PostgreSQL、SQL Server等数据库的兼容语法,低版本MySQL无法识别。
  • WHERE NOT EXISTS子句中的判断条件user_login = a写法错误:a是字符串值需要用引号包裹,同时需要显式关联临时表的字段,否则会触发字段歧义报错。

兼容所有MySQL 5.7+版本的修正写法

把临时值构造替换为UNION ALL的方式,同时修正关联条件即可正常运行:

INSERT INTO wp_post_count(user_login, post_count, comment_count, premium) 
SELECT
      FieldName1, FieldName2, FieldName3, FieldName4
FROM
  (
    SELECT 'a' AS FieldName1, 0 AS FieldName2, 0 AS FieldName3, 0 AS FieldName4 UNION ALL
    SELECT 'a',0,0,0 UNION ALL
    SELECT 'a',0,0,0 UNION ALL
    SELECT 'a',0,0,0
  ) AS TempTableName
  WHERE NOT EXISTS(
     SELECT 1
      FROM wp_post_count
      WHERE wp_post_count.user_login = TempTableName.FieldName1
  )

更优实现方案

如果你的需求是user_login重复就跳过插入,更简单高效的写法是先给user_login字段加唯一索引,再用INSERT IGNORE语法,批量插入数据量大时性能优势非常明显:

  1. 先加唯一索引(仅需执行一次):
ALTER TABLE wp_post_count ADD UNIQUE INDEX idx_user_login(user_login);
  1. 批量插入语句直接写即可,会自动跳过重复的user_login行,无语法报错:
INSERT IGNORE INTO wp_post_count(user_login, post_count, comment_count, premium)
VALUES
('a',0,0,0),
('a',0,0,0),
('a',0,0,0),
('a',0,0,0);

内容的提问来源于stack exchange,提问作者Colin Guild

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:45:03