簡體   English   中英

MySQL“REPLACE INTO”使用SELECT拉取一個字段

[英]MySQL “REPLACE INTO” using a SELECT to pull one field

我有一個MySQL數據庫,有兩個表(實際上還有更多)。 第一個表將產品的SKU編號鏈接到任意ID。 第二個表根據此ID記錄每個項目的日終庫存。 當庫存因銷售以外的原因而更改時,在第二個表中放置一條記錄,其布爾值設置為false。 這讓我可以說這個新號碼無效作為之前銷售的矢量,但是用於第二天的銷售。

此代碼中存在一些語法錯誤。 我還是一名學生,非常感謝幫助解釋這種更新是如何工作的。 我知道第一個值需要來自select語句嗎?

這是我目前的MySQL聲明:

REPLACE INTO sales (`itemID`, `date`, `qty`, `price`) 
VALUES ([itemID], CURDATE(), [qty], 0.00) 
SELECT itemID FROM item WHERE `sku` = [sku]

替換像插入一樣的工作,除非您嘗試插入具有相同鍵的行,它將在替換時刪除而不是給您一個錯誤。

您可以直接指定參數:

REPLACE INTO sales( `item_id`, `date`, `qty`, `price` )
VALUES( 15, '2012-01-01`, 5, '120.00' )

或使用SELECT指定它們:

REPLACE INTO sales( `item_id`, `date`, `qty`, `price` )
SELECT item_id, date, qty, price FROM sales_to_accept
WHERE sales_id = 721

但是,您不能在一個查詢中混合使用這兩種語法。

但是沒有什么可以阻止你將常量值添加為SELECT的列:

REPLACE INTO sales( `item_id`, `date`, `qty`, `price` )
SELECT item_id, CURDATE(), 5, '74.00' FROM item
WHERE `sku` = 'something'

您正嘗試在同一語句中執行替換和選擇。 如果你想這個使用某種方案或簡單地將它輸入到MySQL運行,如果你把一個分號之后)的值節結束時,它會將其視為2個獨立的請求。

如果您通過PHP運行它,那么您需要將其分解為兩個單獨的語句。

REPLACE INTO sales (`itemID`, `date`, `qty`, `price`) 
VALUES ((SELECT itemID FROM item WHERE `sku` = [sku]), CURDATE(), [qty], 0.00)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM