【问题标题】:inserting records in a MySQL table depending on existing values in another table根据另一个表中的现有值在 MySQL 表中插入记录
【发布时间】:2010-10-17 19:28:46
【问题描述】:

我正在使用 MySQL。我想在表中插入一些记录,前提是它们没有 存在于另一个表中。所以我想执行这样的操作:

INSERT INTO sales (name, id)
SELECT name, id FROM sales_h 
WHERE name AND id NOT IN (SELECT name, id FROM T_sales);

问题是 MySQL 不允许这种语法(与 where 子句有关...)我尝试使用 CONCAT 但没有结果。

有什么线索吗??

【问题讨论】:

    标签: mysql insert concat


    【解决方案1】:
    INSERT
    INTO    sales (name, id)
    SELECT  name, id
    FROM    sales_h
    WHERE  (name, id) NOT IN
           (
           SELECT name, id
           FROM t_sales
           )
    

    【讨论】:

      【解决方案2】:

      你试过EXISTSsyntax吗?

      INSERT INTO sales (name, id) 
      SELECT name, id 
      FROM sales_h 
      WHERE NOT EXISTS (SELECT * FROM T_sales WHERE T_sales.name = sales_h.name AND T_sales.id = sales_h.id);
      

      【讨论】:

        【解决方案3】:

        MySQL 允许您像变量一样使用元组:

        这是你的声明:

        INSERT INTO sales (name, id)
        SELECT name, id FROM sales_h 
        WHERE name AND id NOT IN (SELECT name, id FROM T_sales);
        

        问题是“姓名和身份证”。把它变成一个元组:

        INSERT INTO sales (name, id)
        SELECT name, id FROM sales_h 
        WHERE (name, id) NOT IN (SELECT name, id FROM T_sales);
        

        就我个人而言,我不太喜欢这个,原因有两个:元组作为变量在其他 RDBMS 上不起作用(或工作方式不同),并且 IN 在许多情况下往往表现不佳,所以我喜欢将其设为习惯不使用IN。

        正如 jhonny-d-cano-leftware 所说(我已经升级了他),我会使用 where not exists:

        INSERT INTO sales (name, id)
        SELECT name, id FROM sales_h a
        WHERE not exists (
         SELECT * 
         FROM T_sales b 
         where b.id = a.id and b.name = a.name);
        

        【讨论】:

          【解决方案4】:

          您可以查看 MySql 的 ON DUPLICATE 子句

          http://dev.mysql.com/doc/refman/5.1/en/insert-select.html

          【讨论】:

            【解决方案5】:

            你不能说 WHERE name AND id NOT IN... 你需要为每个单独的子句。但是你有 id 作为表 T_sales 中的主键吗?如果是这样,那么这就是您需要检查的全部内容,例如:

            INSERT INTO sales (name, id) 
            (SELECT name, id FROM sales_h WHERE id NOT IN (SELECT id FROM T_sales));
            

            编辑

            嗯,从其他人的答案来看,最好忽略我,因为他们似乎知道更多:-)

            【讨论】:

              【解决方案6】:

              问题在于你的 WHERE。

              它不像你那样阅读。您将其读作“WHERE (name and id) NOT IN (...)”,而将其读作“WHERE name (isn't null) AND (id NOT IN (...))”.. . 如果你明白我的意思。

              改为:ROW(name, id) NOT IN (SELECT name, id FROM T_sales);

              【讨论】:

                【解决方案7】:
                INSERT INTO table_name(column1, column2) SELECT "value one", "value two" FROM DUAL
                WHERE NOT EXISTS(
                    SELECT column1 FROM table_name
                    WHERE column1 = "value one"
                    AND column2 = "value two" LIMIT 1
                )
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-02-04
                  相关资源
                  最近更新 更多