2017-04-21 88 views
0

我正在从一个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`, 
+0

什么是错误? –

+0

[错误] 1064 - 您的SQL语法错误;检查与您的MySQL服务器版本对应的手册,以找到正确的语法,以便在WHERE NOT EXISTS附近使用(SELECT –

+0

'insert'不支持'where' –

回答

1

你有两个where语句在你的外部select 。把你的或in()的第一个换成第二个,然后把第二个换成和。

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需要elimninate“空”,因为你有或....或者你可以改变(New_OnHand IN (-1, 0, 'NULL') OR New_OnHand IS NULL)到... coalesce(New_OnHand,0) IN (-1, 0)如果New_Onhand是空集是零,并确保new_onhand是-1或0 。

0

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

0

尝试将WHERE NOT EXISTS更改为AND NOT EXISTS。所有这些都是为现有的SELECT语句添加一个额外的子句。你可能需要添加一些括号以确保各个部分一起工作(AND和OR可以根据评估顺序相互混淆) (我没有试过这个)

相关问题