[英]MYSQL Insert values into another table if values not exists
我正在从一个Mysql表写入另一个表,并且需要检查要插入的值是否已经存在。 我曾尝试在两列我检查的值作为指数( onhand
。 Sales_Order
与onhand
。 SKU
)
这是我的查询:
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`,
您的外部select中有两个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',因为您有or ....,或者您可以将(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。
如注释中提到的@juergend d, insert
不支持where
。 我建议您创建一个if语句来检查此数据集是否存在。 如果不是,请执行inesert查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.