私はギターショップとそれに付随するウェブサイトを持っています。
他の多くの継続的な問題の中には、サプライヤーの価格変更があります。そのため、各価格リストをデータベースの事前にフォーマットされたテーブルにアップロードし、それに応じて 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ステートメントでどのように行うか、または上記に組み込むのがよいでしょうか?