【发布时间】:2020-01-12 01:26:16
【问题描述】:
我有一个折扣页面,我可以在其中添加应该有折扣价的产品。
每个产品下面都会显示许多产品变体,如果它们不应该成为折扣的一部分,则可以取消选中它们。
当我按下保存时,每个“CHECKED”ProductId 和 VariantId 都将存储在一个名为 StoreDiscountRuleVariant 的表中。
如果打开现有折扣页面以进行编辑,那么我的 SQL 查询将不再从 ProductVariant 表中获取未选中的产品变体,而只会获取已保存的“选中”产品。
我希望 SQL 查询既返回在 StoreDiscountRuleVariant 表中具有匹配 variantId 外键的 ProductVariants ,也返回不返回的 ProductVariants。我还需要一个额外的返回列来显示 variantId 是否实际存在于 StoreDiscountRuleVariant 表中 - 例如 isChecked=true/false。
我认为此解决方案比在保存后将已选中和未选中的 variantIds 存储在 StoreDiscountRuleVariant 表中更好,因为在进行此折扣后添加的新 ProductVariants 在编辑时不会显示。
我被指出了这样做的方向:
SELECT p.productid, pv.variantnameSE, pv.sku, pv.variantId,
rv.discountrulevariantid, rv.productvariantid FROM
dbo.StoreDiscountRuleVariant rv INNER JOIN dbo.Product p ON p.productId =
rv.productid LEFT JOIN dbo.productVariant pv ON pv.foreignProductId =
p.productId WHERE rv.discountruleid = 24
结果如下:
第 1 行:
productid: 1326, variantnamese: Vit, sku: FOD46-1, variant.variantid: 822, discountrulevariantid: 572, discountrulevariant.productvariantid: 1035
第 2 行:
productid: 1326, variantnamese: Svart, sku: FOD46-2, variant.variantid: 1035, discountrulevariantid: 572, discountrulevariant.productvariantid: 1035
StoreDiscountRuleVariant 表中仅存在 ROW2/variantid: 1035。 所以至少对我来说奇怪的是,discountrulevariantid 在两行上都指向 1035。 ROW1 的 discountrulevariantid: 值不应该为空,因为 StoreDiscountRuleVariant 中不存在 variantid:822。
【问题讨论】:
-
使用 LEFT JOIN 代替 INNER JOIN stackoverflow.com/questions/5706437/…
标签: sql sql-server tsql