【问题标题】:IF EXISTS THEN ELSE如果存在则其他
【发布时间】:2012-07-18 12:12:13
【问题描述】:

这很简单,但我找不到答案。如果组合确实存在,则更新,否则插入。

IF EXISTS(SELECT customer_id FROM payment_conditions WHERE customer_id = 2 AND shipping_company_id = 1) 

THEN
UPDATE payment_conditions SET payment_condition = "pay in full" WHERE customer_id = 2  AND shipping_company_id = 1;

ELSE
INSERT INTO payment_conditions customer_id, shipping_company_id, payment_condition, active VALUES (2,1,"some value",1);


END IF

【问题讨论】:

    标签: mysql if-statement insert exists


    【解决方案1】:

    你应该将customer_idshipping_company_id设置为外键,这样你就可以使用

    INSERT INTO payment_conditions
        customer_id, shipping_company_id, payment_condition, active
    VALUES (2, 1, "some value", 1)
    ON DUPLICATE KEY UPDATE payment_condition = "pay in full"
    

    【讨论】:

      【解决方案2】:

      如果您在 (shipping_company_id, customer_id) 上有一个唯一键,您可以使用:

      INSERT INTO payment_conditions 
      SET customer_id = 2,
        shipping_company_id = 1,
        payment_condition = 'some value',
        active = 1
      ON DUPLICATE KEY UPDATE payment_condition = 'pay in full'
      

      【讨论】:

      • 我知道,我没有唯一的密钥。它本身的组合是独一无二的。
      【解决方案3】:
      INSERT INTO payment_conditions (customer_id, shipping_company_id, payment_condition, active) 
      VALUES (2,1,"some value",1)
      ON DUPLICATE KEY UPDATE payment_condition = "pay in full"
      

      【讨论】:

        【解决方案4】:

        或者发出两条语句(注意先用 UPDATE),并取消条件逻辑。如果该行不存在,则 UPDATE 将无效。如果您的密钥恰好与 customer_id + shipping_company 不同,这应该可以工作。

        UPDATE payment_conditions SET payment_condition = "pay in full" 
        WHERE customer_id = 2  AND shipping_company_id = 1;
        

        然后

        INSERT INTO payment_conditions 
        (customer_id
        , shipping_company_id
        , payment_condition
        , active) 
        VALUES (2,1,"some value",1)
        where not exists 
        (select * FROM payment_conditions 
           WHERE customer_id = 2 AND shipping_company_id = 1);
        

        【讨论】:

          【解决方案5】:

          在 SQL Server 中使用合并语句 - 看起来这些答案暗示了 MySQL 语法。您没有说明数据库风格,但 Merge 是在 SQL Server 上执行此操作的推荐方法。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-04-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-08
            • 2012-08-08
            • 1970-01-01
            相关资源
            最近更新 更多