設置演示
CREATE TABLE mytable
(id INT UNSIGNED NOT NULL PRIMARY KEY
, thestring VARCHAR(32)
, price DECIMAL(11,2)
) ENGINE=INNODB
;
INSERT INTO mytable (id, thestring, price) VALUES
(1,'0011' , 123.45)
,(2,'00110' , 45.67)
,(3,'001100' , 0.00)
,(4,'10' , 4.44)
,(5,'100' , 5.55)
,(6,'1000' , 0.00)
;
編寫標識MYTABLE
SELECT y.*
FROM `mytable` `y`
WHERE y.price = 0.0
ORDER BY y.id
在Y行的查詢添加一個連接到MYTABLE找到匹配的X行
SELECT x.id AS x_id
, x.thestring AS x_thestring
, x.price AS x_price
, y.id AS y_id
, y.thestring AS y_thestring
, y.price AS y_price
FROM mytable `y`
JOIN mytable `x`
ON CONCAT(x.thestring,'0') = y.thestring
WHERE y.price = 0.0
ORDER BY y.id
將SELECT轉換爲UPDATE。 (替換SELECT ... FROM與UPDATE和WHERE子句前添加一個SET子句。
UPDATE mytable `y`
JOIN mytable `x`
ON CONCAT(x.thestring,'0') = y.thestring
SET x.price = 0.5
WHERE y.price = 0.0
只是f(x.thestring)
更換CONCAT(x.thestring,'0')
。
另一種選擇是使用相關子查詢。
首先,寫一個SELECT
SELECT x.*
FROM mytable `x`
WHERE EXISTS (SELECT 1
FROM mytable `y`
WHERE y.thestring = f(x.thestring)
AND y.price = 0.00
)
的然後將其轉換爲UPDATE。將SELECT ... FROM
替換爲UPDATE
關鍵字,並在WHERE
子句前添加SET
子句。
UPDATE mytable `x`
SET x.price = 0.5
WHERE EXISTS (SELECT 1
FROM mytable `y`
WHERE y.thestring = f(x.thestring)
AND y.price = 0.00
)
我猜觸發器會在這裏工作 – minigeek
哇......不是那麼容易嗎? –
這應該只是一個'WHERE'子句,可能是一個自連接。我並不確定我是否瞭解這種情況,您能否顯示一些樣本數據和預期結果? – Barmar