私はギターショップとそれに付随するウェブサイトを持っています。
他の多くの継続的な問題の中には、サプライヤーの価格変更があります。そのため、各価格リストをデータベースの事前にフォーマットされたテーブルにアップロードし、それに応じて sku ごとに行を更新することにより、製品をサプライヤーの価格リストに同期しようとしています。
ギブソンのギターを例にとると、次のような表products
と表PriceList_gibson
があります (簡略化)。
**Products:**
id | sku | description | cost .... more fields
**PriceList_gibson**
id | sku | description | trade .... more fields
次のようなWebメソッドがあります。
<System.Web.Services.WebMethod()> _
Public Shared Function syncPrices(supplierId, tableName)
Try
Common.changeData("UPDATE " & tableName & " p, products pp SET pp.rrp= p.rrp, pp.cost= p.trade, pp.upc= CASE WHEN p.upc <> '' THEN p.upc ELSE pp.upc END WHERE pp.sku= p.sku AND pp.supplier ='" & supplierId & "'")
Return "success|Prices Synced"
Catch ex As Exception
Return "error|" & ex.ToString
End Try
End Function
重要な部分は、分解された SQL ステートメントであり、次のようになります。
UPDATE " & tableName & " p, products pp
SET
pp.rrp= p.rrp,
pp.cost= p.trade,
pp.upc= CASE WHEN p.upc <> '' THEN p.upc ELSE pp.upc END
WHERE pp.sku= p.sku AND pp.supplier ='" & supplierId & "'
明らかtableName
に とsupplierId
は、この関数の呼び出しから渡される変数であり、どのサプライヤーの価格を扱っているかを決定し、データベース内のどの製品を参照するかを決定します。
sku
これは正常に機能し、製品テーブルのsku
フィールドをサプライヤーの価格表のフィールドに一致させ、それに応じて価格関連のフィールドを更新し、利用可能な場合は UPC も更新します。
処理されない 2 つのケースがあります。
- 製品が廃止された場合、
sku
アイテムは価格表から削除されるため、一致するものは見つかりませんが、products
テーブルに残る場合があります - a
sku
がテーブルに正しく入力されていない場合products
、一致は失敗します。
だから、私がやりたいのは、フィールドが更新されているサプライヤーの価格表と一致するが、価格表には表示されない項目のリストを取得することsupplierId
ですproducts
。
もちろん、レコードをループすることでこれを行うことができますが、1つのSQLステートメントでどのように行うか、または上記に組み込むのがよいでしょうか?