我正在从一个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`,
答案 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查询。