我将CSV导入到temp_import_table中,在提交到数据库(mysql 5.0.88)之前,我正在其中验证导入的数据。

我正在尝试在验证表中的记录中搜索重复的条目,但无法使它像这样工作:

<cfquery datasource="#session.datasource#">
    UPDATE import_pricat_csv
    SET err = "ja", errtxt = "duplicate EAN"
    WHERE iln = <cfqueryparam value="#Session.logId#" cfsqltype="cf_sql_varchar" maxlength="16">
        AND ean IN (
            SELECT ean
            FROM import_pricat_csv
            GROUP BY ean
            HAVING COUNT(ean) > 1
            )
</cfquery>


这将引发错误:

You can't specify target table 'import_pricat_csv' for update in FROM clause


题:
这不可能吗?有没有比循环一次以获取重复项和第二次将dup-record设置为err="yes"更好的方法?

谢谢!

最佳答案

您可以使用多表UPDATE语法将其与物化组结果结合在一起:

UPDATE import_pricate_csv NATURAL JOIN (
  SELECT ean FROM import_pricate_csv GROUP BY ean HAVING COUNT(*) > 1
) t SET
  import_pricate_csv.err    = 'ja',
  import_pricate_csv.errtxt = 'duplicate EAN'
;

10-06 12:30