【问题标题】:How do you filter a composite key in the where clause?如何在 where 子句中过滤复合键?
【发布时间】:2019-03-24 19:29:30
【问题描述】:

我正在尝试使用复合键过滤查询,但是,我不确定如何在 where 子句中使用复合键进行过滤。 XSiteProductItemIdMercuryProductItemId 组成一个复合键,用于标识唯一的行。

这是我的查询:

SELECT VMPOrdersExtract.XSiteProductItemId
  ,  VMPOrdersExtract.MercuryProductItemId
FROM Appraisal.ext.VMPOrders AS VMPOrdersExtract
LEFT JOIN dw.DimAppraisal DimApprasial ON DimApprasial.XsiteProductItemId = VMPOrdersExtract.XSiteProductItemId
  AND DimApprasial.MercuryProductItemId = VMPOrdersExtract.MercuryProductItemId
WHERE VMPOrdersExtract.LastSyncDateTime > DimApprasial.LastSyncDateTime
OR (
    VMPOrdersExtract.XSiteProductItemId
    AND VMPOrdersExtract.MercuryProductItemId
) is null

很明显,WHERE 子句中的OR 条件在语法上不正确。如何仅过滤 nullDimAppraisal 表中不存在的复合键记录?

【问题讨论】:

  • SELECT VMPOrdersExtract.XSiteProductItemId,VMPOrdersExtract.MercuryProductItemId FROM Appraisal.ext.VMPOrders AS VMPOrdersExtract LEFT JOIN dw.DimAppraisal DimApprasial ON DimApprasial.XsiteProductItemId = VMPOrdersExtract.XSiteProductItemId AND DimApprasial.MercuryProductItemId = VMPOrdersExtract.MercuryProductItemId WHERE VMPOrdersExtract.LastSyncDateTime > DimApprasial.LastSyncDateTime 或(VMPOrdersExtract.XSiteProductItemId 为空且 VMPOrdersExtract.MercuryProductItemId 为空)

标签: sql sql-server tsql where-clause dml


【解决方案1】:

怎么样

WHERE VMPOrdersExtract.LastSyncDateTime > DimApprasial.LastSyncDateTime
OR (VMPOrdersExtract.XSiteProductItemId IS NULL AND 
VMPOrdersExtract.MercuryProductItemId IS NULL);

【讨论】:

  • 这么简单的解决方案,我现在都在自嘲。 :) 谢谢!
  • @PJ.SQL 考虑接受答案解决您的问题:)
  • 我知道了。只需要等待最短时间限制通过。 :)
【解决方案2】:

也将其添加到答案中;)

 SELECT VMPOrdersExtract.XSiteProductItemId, VMPOrdersExtract.MercuryProductItemId 
FROM Appraisal.ext.VMPOrders AS VMPOrdersExtract LEFT JOIN dw.DimAppraisal DimApprasial 
ON DimApprasial.XsiteProductItemId = VMPOrdersExtract.XSiteProductItemId AND 
DimApprasial.MercuryProductItemId = VMPOrdersExtract.MercuryProductItemId WHERE 
VMPOrdersExtract.LastSyncDateTime > DimApprasial.LastSyncDateTime OR 
(VMPOrdersExtract.XSiteProductItemId is null AND VMPOrdersExtract.MercuryProductItemId is null)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 2015-04-10
    • 1970-01-01
    相关资源
    最近更新 更多