我有一家吉他店,还有一个与之配套的网站。
许多其他持续存在的问题包括供应商的价格变化,因此我试图通过将每个价目表上传到我的数据库中的预先格式化的表中,然后通过 sku 相应地更新行来将产品同步到供应商价目表。
所以,拿 Gibson 吉他来说,我有一张桌子products
和一张桌子PriceList_gibson
,看起来像这样(简化):
**Products:**
id | sku | description | cost .... more fields
**PriceList_gibson**
id | sku | description | trade .... more fields
我有一个看起来像这样的网络方法:
<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。
有两种情况没有处理:
- 如果产品停产,
sku
将找不到匹配项,因为该项目已从价目表中删除,但可能仍保留在products
表中 - 如果 a
sku
被错误地输入到products
表中,匹配将失败。
所以,我想要做的是获取与正在更新的供应商价目表匹配但未出现在价目表中supplierId
的项目列表。products
我当然可以通过循环记录来做到这一点,但是我将如何使用 1 条 sql 语句来做到这一点,或者更好的是,将其合并到上面?