2017-04-21 85 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可以根據評估順序相互混淆) (我沒有試過這個)

相關問題