0

MYSQL で、2 つのテーブルを結合しているときに更新に制限を設定すると、それが表示されます

エラー 1221 (HY000): UPDATE と LIMIT の使用方法が正しくありません

update 
       order_product_mapping as opm, 
       order_details as od, 
       product as p 
   set fullfillment='Y' 
 where 
       p.product_id=opm.product_id 
       AND od.order_id=opm.order_id 
       AND od.order_id=100 
       AND p.product_id=1 limit 1;

私のテーブルスキーマは
order_details テーブルです

CREATE TABLE `order_details` (
  `order_id` int(5) NOT NULL AUTO_INCREMENT,
  `amount` int(5) DEFAULT NULL,
  `order_status` char(1) DEFAULT 'N',
  `company_order_id` int(5) DEFAULT NULL,
  PRIMARY KEY (`order_id`)
)

製品表

CREATE TABLE `product` (
  `product_id` int(5) NOT NULL AUTO_INCREMENT,
  `product_name` varchar(50) DEFAULT NULL,
  `product_amount` int(5) DEFAULT NULL,
  `product_status` char(1) DEFAULT 'N',
  `company_product_id` int(5) DEFAULT NULL,
  PRIMARY KEY (`product_id`)
)

order_product_mapping

CREATE TABLE `order_product_mapping` (
  `product_id` int(5) DEFAULT NULL,
  `order_id` int(5) DEFAULT NULL,
  `fulfillment` char(1) DEFAULT 'N'
)

入力として company_order_id と company_product_id を取得し、order_product_mapping でフルフィルメントのステータスを変更する更新クエリを作成します。クエリに制限を追加すると、エラーが表示されます。

4

1 に答える 1

2

エラーの説明については、この投稿を参照してください: https://stackoverflow.com/a/4291851/1073631

回避策/ハックを見つけたと思います。order_product_mapping テーブルを結合し、行番号を作成します。行番号 = 1 を使用すると、LIMIT 1 と同じように機能するはずです。

UPDATE order_product_mapping opm
  JOIN (SELECT *, @rowNum:=@rowNum+1 rn FROM order_product_mapping JOIN (SELECT @rowNum:= 0) r)
    as opm2 ON opm.product_id = opm2.product_id and opm.order_id = opm2.order_id
  JOIN product p ON p.product_id=opm.product_id AND p.product_id=1
  JOIN order_details as od ON od.order_id=opm.order_id 
SET opm.fulfillment = 'Y'
where od.order_id=100 
And rn = 1;

いくつかのサンプル Fiddle: http://sqlfiddle.com/#!2/03f12/1

于 2013-02-19T15:22:27.743 に答える