セットアップのデモ
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)
;
一致するXの行を見つけるためにmytableをする参加追加mytableは
SELECT y.*
FROM `mytable` `y`
WHERE y.price = 0.0
ORDER BY y.id
でY行を特定するクエリを書く
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と... FROM SELECT交換して、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
)
アンを書きますdを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
Whoa ... not super easy? –
これはちょうど 'WHERE'節でなければならず、多分自己結合であるべきです。私は条件を理解しているかどうか分からず、サンプルデータと期待される結果を表示できますか? – Barmar