【问题标题】:SQL Where Not Exists not workingSQL Where Not Exists 不起作用
【发布时间】:2016-05-19 20:40:25
【问题描述】:

我有两个名为 TEMPDATA 和 Product 的表。我将 csv 提要中的所有数据转储到 TEMPDATA 中,然后将其组织到相应的表中,Product 就是其中之一。

我正在尝试将没有重复“ean”编号的 TEMPDATA 的所有内容插入到 Product 中,前提是它在 Product 中尚不存在。

我尝试使用的查询如下...

INSERT IGNORE INTO `Product` (`product_ean`, `product_name`, `product_description`, `product_image`, `product_thumbnail`, `product_category`) 
SELECT `ean`, `product_name`, `description`, `merchant_image_url`, `aw_thumb_url`, `merchant_category` 
FROM (
    SELECT `ean`, `product_name`, `description`, `merchant_image_url`, `aw_thumb_url`, `merchant_category`, count( * ) 
    FROM TEMPDATA
    GROUP BY `ean`
    HAVING count( * ) = 1
) AS t
WHERE NOT EXISTS (
    SELECT `product_ean` FROM Product
)

所有单独的部分似乎都在工作,除了当我包含“WHERE NOT EXISTS”子句时,有人可以帮我吗?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    试试这个:

        INSERT IGNORE INTO Product (product_ean, product_name, product_description, product_image, product_thumbnail, product_category) 
    SELECT ean, product_name, description, merchant_image_url, aw_thumb_url, merchant_category 
    FROM (
        SELECT ean, product_name, description, merchant_image_url, aw_thumb_url, merchant_category, count( * ) 
        FROM TEMPDATA
        GROUP BY ean
        HAVING count( * ) = 1
    ) AS t
    WHERE NOT EXISTS (
        SELECT product_ean FROM Product AS A WHERE A.product_ean = t.product_name
    )
    

    你错过了这个:

    WHERE A.product_ean = t.product_name
    

    在 NOT EXIST 语句中

    【讨论】:

      【解决方案2】:

      您需要包含要搜索的 where 子句,见下文

          INSERT IGNORE INTO `Product` (`product_ean`, `product_name`, `product_description`, `product_image`, `product_thumbnail`, `product_category`) 
      SELECT `ean`, `product_name`, `description`, `merchant_image_url`, `aw_thumb_url`, `merchant_category` 
      FROM (
          SELECT `ean`, `product_name`, `description`, `merchant_image_url`, `aw_thumb_url`, `merchant_category`, count( * ) 
          FROM TEMPDATA
          GROUP BY `ean`
          HAVING count( * ) = 1
      ) AS t
      WHERE NOT EXISTS (
          SELECT `product_ean` FROM Product P where t.ean = p.`product_ean`
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-03
        • 2013-04-17
        • 1970-01-01
        • 1970-01-01
        • 2021-05-29
        • 1970-01-01
        • 2018-01-08
        • 1970-01-01
        相关资源
        最近更新 更多