我有一家吉他店,还有一个网站。
在许多其他持续性问题中,供应商的价格变化,所以我试图通过将每个价目表上传到我的数据库中的预先格式化的表格,然后通过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(如果可用)。
有两种情况未得到处理:
sku
匹配项,但可能会保留在products
表sku
表中的products
输入错误,则匹配将失败。因此,我想要做的是获取supplierId
中products
字段与正在更新的供应商价格表的字段匹配的项目列表,但不会出现在价目表中。
我可以通过循环记录来做到这一点,但是如何用1 sql语句来做,或者甚至更好,将它包含在上面?
答案 0 :(得分:0)
编辑:要获取product
中存在但" & tableName & "
中不存在的行...
SELECT
*
FROM
product pp
LEFT OUTER JOIN
" & tableName & " p
ON p.sku= pp.sku
WHERE
pp.supplier = '" & supplierId & "'
AND p.sku IS NULL
或者...
SELECT
*
FROM
product
WHERE
supplier = '" & supplierId & "'
AND NOT EXISTS (SELECT * FROM " & tableName & " WHERE sku = product.sku)