2016-10-21 8 views
0

MySQLテーブルの2つ(inventorysold)のテーブルのインベントリを更新しようとしています。MySQLでキーワードを持つすべての行に影響する製品バリアント

のは、我々が扱っているSKUがBT888-16

UPDATE inventory JOIN sold 
ON inventory.sku = sold.sku 
SET inventory.quantity = inventory.quantity - sold.quantity 

あるとしましょう予想通りこれは動作しますが、BT888-16BT888 SKUの製品バリエーションです。

BT888-16soldは、BT888inventoryのすべての数量行にどのように影響するのですか?

たとえば、BT888-16は、フレーズBT888が入っている数量の行すべてに影響するはずです。 BT888BT888-01BT888-02BT888-03 - すべての方法は、アップBT888-***

+0

skuの最初の5文字で結合すると、skuの最初の5文字でグループ化された販売金額の合計になります。 – Shadow

+0

すべてのSKUが正確に5文字を持っているわけではありません。 SKUの完全一致に基づいてバリエーションを減算する方法があることを望んでいました。しかし、製品バリエーションにはすべて***が付いています。 – bbruman

答えて

2

にこれが場しのぎようだが、あなたが明示的にロジックを置くことができます。

UPDATE inventory i JOIN 
     sold s 
     ON i.sku = s.sku or 
      (s.sku = 'BT888-16' and i.sku like 'BT888-%') 
    SET i.quantity = i.quantity - s.quantity; 

EDIT:

私が意味する、あなたがゲームを開始することができます

UPDATE inventory i JOIN 
     sold s 
     ON i.sku = s.sku or 
      (s.sku like '%-16' and i.sku like concat(substring_index(s.sku, '-', 1), '-%') 
    SET i.quantity = i.quantity - s.quantity; 

ただし、次のような表に列が必要ですあなたのためのマッピングを行います。つまり、相互に影響を受けるSKU IDのグループを定義できる必要があります。

+1

それはクールだ、私はあなたがそれを行うことができるか分からなかった。ちなみに、あなたは括弧を忘れてしまった。 – jhaagsma

+1

@jhaagsmaあなたが編集権限を持っていれば、回答を編集してください。ゴードンはまったく気にしないと思います。 – Rahul

+0

@Rahul申し訳ありませんが、私は編集権限を持っていませんでした!ヘッドアップをありがとう。興味深いもの: – jhaagsma

関連する問題