Mysql 使用子查询的结果更新子查询中也引用的表

Mysql 使用子查询的结果更新子查询中也引用的表,mysql,sql,sql-insert,mysql-error-1093,Mysql,Sql,Sql Insert,Mysql Error 1093,我正试图修复一个不完整的数据库,在那里我无法控制模式,我需要找到丢失的条目并插入它们 这是我得出的语法: INSERT INTO downloads (product_id, filename) VALUES ( products_id = ( SELECT id FROM products WHERE id NOT IN ( SELECT product_id FROM downloads

我正试图修复一个不完整的数据库,在那里我无法控制模式,我需要找到丢失的条目并插入它们

这是我得出的语法:

INSERT INTO 
  downloads (product_id, filename)
VALUES 
( 
  products_id = ( SELECT id
         FROM products 
         WHERE id NOT IN
           ( SELECT product_id
             FROM downloads
           )
       ), 
  filename = 'default.zip'
)
子查询单独工作正常,但上面抛出了一个错误

#1093 - You can't specify target table 'download' for update in FROM clause
我已经回顾了许多与此错误()相关的StackOverflow问题,我认为有一种方法可以嵌套子查询,使其为“”,但我还无法调整它

如果我的方法效率不高,那没关系,我很想看到一个接近我语法的解决方案,但任何解决方案都会有帮助。

要做的事情

  • 使用
    INSERT…插入SELECT语句
  • 使用
    左连接
    而不是
    不在
  • 不要忘记在以下列中添加索引:
    products.ID
    downloads.product\u ID
    ,以提高性能
质疑,

INSERT INTO  downloads (product_id, filename)
SELECT  a.id AS product_id, 'default.zip' AS filename
FROM    products a
        LEFT JOIN downloads b
            ON a.ID = b.product_id
WHERE   b.product_id IS NULL

工作得很有魅力。我对
为NULL的含义缺乏理解,这导致我使用嵌套子查询解决方案。