【问题标题】:SQL DB2 - conditional logic in WHERE clauseSQL DB2 - WHERE 子句中的条件逻辑
【发布时间】:2011-10-03 16:45:45
【问题描述】:

我需要根据位置 ID 拉回记录,但我有两个字段可能包含传入条件....

类似的东西

SELECT * FROM tbl
WHERE myVar = locationID
    IF LocationID = 0
      myVar = location2ID

这是一个“合乎逻辑”的例子……

我觉得我可以的

WHERE myVar = CASE WHEN locationID = 0 THEN location2ID ELSE locationID END

虽然我已经读过 WHERE 子句中的 CASE 应该避免......?为什么?或者这样可以吗? - 无论哪种方式都失败了

WHERE CASE WHEN locationID=0 THEN location2ID=myVAr ELSE locationID=myVar END

也失败了

谢谢

抱歉,小伙子们混淆了 - 并不是说​​“模棱两可” - 看起来 #2 会做我想要的 - 但是这里要求的澄清是问题......

该表存储两个位置,然后我们调用 CURRENT_LOC 和 ORIGINAL_LOC...在大多数情况下,它们都有数据,但在某些情况下,“东西”没有移动...所以 CURRENT_LOC 为“0”。我的问题是我将传递一个 LOCATION ID,我想要 CURRENT_LOC 匹配的记录,或者如果 CURRENT_LOC=0,那么我还想要 ORIGINAL_LOC...匹配的地方...

这对讨论有帮助吗?我希望。

【问题讨论】:

  • 您得到了两个答案,它们对问题的看法略有不同。请消除您的问题的歧义(通过指出当locationID 不为0 时location2ID 会发生什么),并接受相关答案。

标签: sql db2 case


【解决方案1】:

WHERE myVar = COALESCE(NULLIF(locationID, 0), location2ID)

或者,

WHERE (
       (locationID <> 0 AND myVar = locationID) 
       OR 
       (locationID = 0 AND myVar = location2ID)
      ) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    相关资源
    最近更新 更多