如何处理具有两个潜在列的联接

时间:2018-12-14 15:00:29

标签: sql-server inner-join

我有一个简单的sql语句,该语句连接了一些表以获取有关容器中各项的一些元数据。我的问题是tableTwo现在有一个替换productid的字段(我们称它为masterProductId)(如果已填充),因此我们想在该列上代替该行加入one.productid。如果未使用masterProductId,则通常将其留空,但不为null。我不确定如何在一个语句中处理潜在的不同联接。这是语句的基本内容,没有尝试添加masterProductId

select distinct one.code from tableOne one
inner join tableTwo two on two.productid = one.productid
inner join tableThree three on three.itemguid = two.itemguid
where three.wrhscontrid = @containerId
and one.statecode = '' 

2 个答案:

答案 0 :(得分:1)

所以让我重申一下:

  1. 表2具有masterProductKey。
  2. 如果其中包含值,则使用该值连接到Product。
  3. 如果没有,则使用产品密钥加入

这是解决方案:

join tableTwo two 
      on case when masterProductKey!='' 
              then masterProductKey 
              else two.productid end = one.ProductID

答案 1 :(得分:0)

inner join tableTwo two on coalesce(two.masterproductid, two.productid) = one.productid