SQL DB2 - WHERE子句中的条件逻辑

jpm*_*yob 2 sql db2 case

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

这样的事情

SELECT * FROM tbl
WHERE myVar = locationID
    IF LocationID = 0
      myVar = location2ID
Run Code Online (Sandbox Code Playgroud)

这是一个"逻辑"的例子......

我想我能做到

WHERE myVar = CASE WHEN locationID = 0 THEN location2ID ELSE locationID END
Run Code Online (Sandbox Code Playgroud)

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

WHERE CASE WHEN locationID=0 THEN location2ID=myVAr ELSE locationID=myVar END
Run Code Online (Sandbox Code Playgroud)

失败

谢谢

对于混乱小伙伴感到抱歉 - 并不意味着"模棱两可" - 看起来#2会做我想做的事 - 但是这里要求澄清的是问题......

该表存储两个位置,然后调用CURRENT_LOC和ORIGINAL_LOC ...在大多数情况下,这些将同时具有数据,但在某些情况下,'thing'没有移动...所以CURRENT_LOC为'0'.我的问题是我将传入一个LOCATION ID,我想要CURRENT_LOC匹配的记录,或者如果CURRENT_LOC = 0那么我还想要ORIGINAL_LOC ...匹配的地方......

这有助于讨论吗?我希望.

one*_*hen 5

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

或者,

WHERE (
       (locationID <> 0 AND myVar = locationID) 
       OR 
       (locationID = 0 AND myVar = location2ID)
      ) 
Run Code Online (Sandbox Code Playgroud)