如果值不存在,MYSQL将值插入另一个表

时间:2017-04-21 14:06:22

标签: mysql

我正在从一个Mysql表写到另一个,我需要检查我插入的值是否已经存在。我尝试在我检查值的两列上设置索引(onhandSales_Order& onhandSKU

这是我的问题:

INSERT INTO onhand(Sales_Order, SKU, Inventory, Time)
  SELECT Sales_Order, Part_Number, '0', Now() AS DateTimeStamp from 
  fullfillment_sage WHERE New_OnHand IN (-1, 0, 'NULL') OR New_OnHand IS NULL
WHERE NOT EXISTS (SELECT 
  `fullfillment_sage`.`Sales_Order`, 
  `fullfillment_sage`.`Part_Number`
   FROM `fullfillment_sage`
   LEFT JOIN `onhand`
   ON `fullfillment_sage`.`Sales_Order` = `onhand`.`Sales_Order`
   AND `fullfillment_sage`.`Part_Number` = `onhand`.`SKU` 
   WHERE `fullfillment_sage`.`New_OnHand` IN (-1, 0, 'NULL') OR 
   `fullfillment_sage`.`New_OnHand` IS NULL);

此处的查询错误:

 'WHERE NOT EXISTS (SELECT `fullfillment_sage`.`Sales_Order`, 

2 个答案:

答案 0 :(得分:1)

外部选择中有两个where语句。用第一个包裹你的或在()中,然后将第二个地方改为和。

INSERT INTO onhand(Sales_Order, SKU, Inventory, Time)
  SELECT Sales_Order
       , Part_Number
       , 0
       , Now() AS DateTimeStamp 
  FROM fullfillment_sage 
  WHERE (New_OnHand IN (-1, 0, 'NULL') OR New_OnHand IS NULL)
    AND NOT EXISTS (SELECT `fullfillment_sage`.`Sales_Order`
                         , `fullfillment_sage`.`Part_Number`
                    FROM `fullfillment_sage`
                    LEFT JOIN `onhand`
                      ON `fullfillment_sage`.`Sales_Order` = `onhand`.`Sales_Order`
                     AND `fullfillment_sage`.`Part_Number` = `onhand`.`SKU` 
                    WHERE `fullfillment_sage`.`New_OnHand` IN (-1, 0, 'NULL') 
                      OR  `fullfillment_sage`.`New_OnHand` IS NULL);

这假设选择没有其他问题,我还没有看得太近。

我不认为字符串' 0'应该插入我认为它应该是0.虽然隐式转换可能会帮助你。

也许new_onhand需要消除' null'因为你有或....或者你可以将(New_OnHand IN (-1, 0, 'NULL') OR New_OnHand IS NULL)改为...... coalesce(New_OnHand,0) IN (-1, 0)如果New_Onhand为null,则将其设置为零,并确保new_onhand为-1或0。

答案 1 :(得分:0)

正如评论中提到的@juergend d,insert不支持where。我建议你创建一个if语句来检查这个数据集是否存在。如果没有,请执行inesert查询。