SQL Server查询,既返回带外键的项,又返回不带';我没有
我有一个折扣页面,我可以添加应该有折扣价格的产品 每种产品都会在其下方显示一些产品变体,如果它们不属于折扣的一部分,则可以取消选中这些变体 当我按下save键时,每个“选中”的ProductId和VariantId将存储在一个名为StoreDiscontruleVariant的表中 如果打开现有折扣页进行编辑,则我的SQL查询不再从ProductVariant表中获取未检查的产品变体,而只获取已保存的“已检查”的产品变体 我希望SQL查询既返回在SQL Server查询,既返回带外键的项,又返回不带';我没有,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个折扣页面,我可以添加应该有折扣价格的产品 每种产品都会在其下方显示一些产品变体,如果它们不属于折扣的一部分,则可以取消选中这些变体 当我按下save键时,每个“选中”的ProductId和VariantId将存储在一个名为StoreDiscontruleVariant的表中 如果打开现有折扣页进行编辑,则我的SQL查询不再从ProductVariant表中获取未检查的产品变体,而只获取已保存的“已检查”的产品变体 我希望SQL查询既返回在StoreDiscountRuleVariant表
StoreDiscountRuleVariant
表中具有匹配variantId外键的ProductVariants,也返回不具有匹配variantId外键的ProductVariants。我还需要一个额外的返回列来显示variantId是否实际存在于storedecontrulevariant
表中,例如isChecked=true/false
我认为这种解决方案比在保存后将选中的和未选中的Variatid存储在StoreDiscountRuleVariant
表中要好,因为在进行此折扣后添加的新ProductVariant在编辑时不会显示
我被指向了这样做的方向:
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,VariantName:Vit,sku:FOD46-1,variant.variantid:822,discountrulevariantid:572,discountrulevariantid:1035
第2行:
productid:1326,VariantName:Svart,sku:FOD46-2,variant.variantid:1035,discountrulevariantid:572,DiscountruleVarianti.productvariantid:1035
StoreDiscountRuleVariant表中仅存在第2行/variantid:1035。
所以至少对我来说奇怪的是DiscountruleVariatid在两行上都指向1035。行1的discountrulevariantid:值不应该为空,因为variantid:822在StoreDiscountRuleVariant中不存在 您需要一个
左连接
。目前尚不清楚您是想要所有产品还是所有StoreDiscountrules变体
无论你想要什么,那都应该是第一张桌子。基于WHERE
子句,我假设它是变量:
SELECT rv.productid, rv.productvariantid as variantid,
p.productnameSE as productname, pv.variantnameSE as variantname,
pv.sku, pv.ishidden, pp.picUrl, pp.picid
FROM dbo.StoreDiscountRuleVariant rv LEFT JOIN
dbo.Product p
ON p.productId = rv.productid LEFT JOIN
dbo.productVariant pv
ON pv.variantId = rv.productvariantid OUTER APPLY
(SELECT TOP (1) pp.*
FROM productpic pp
WHERE pp.productid = p.productid
ORDER BY pp.isfrontpic DESC
) pp
WHERE rv.discountruleid = 16
ORDER BY rv.productid, pv.sortOrder;
外部应用
适用于横向连接CORSS-APPLY
——就像内部连接
——将删除不匹配的变体。使用左连接而不是内部连接