SQL DB2 - условная логика в предложении WHERE - PullRequest
2 голосов
/ 03 октября 2011

Мне нужно получить записи на основе идентификатора местоположения, но у меня есть два поля, которые МОГУТ содержать входящие критерии ....

что-то вроде этого

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

это «логичный» пример ...

Я думаю, что могу сделать

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

, хотя я читал, что CASE в предложении WHERE следует избегать ...?Зачем?или это нормально?- в любом случае, он НЕ УДАЕТСЯ

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

также НЕ УДАЛЯЕТ

thx

Извините за путаницу - не хотел быть "двусмысленным" - похоже, что № 2 будетделай то, что я хочу - но для разъяснения, запрошенного здесь, есть проблема ...

таблица хранит ДВУХ местоположений, затем назовем CURRENT_LOC и ORIGINAL_LOC ... в большинстве случаев они ОБА будут иметь данные, но в некоторыхВ некоторых случаях «вещь» не перемещается ... поэтому CURRENT_LOC равен «0».Моя проблема заключается в том, что я передам в LOCATION ID, я хочу записи, где CURRENT_LOC соответствует ИЛИ, если CURRENT_LOC = 0, тогда я также хочу ORIGINAL_LOC ..., где это соответствует ...

делает этопомочь в обсуждении?Я надеюсь.

1 Ответ

5 голосов
/ 04 октября 2011

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

В качестве альтернативы

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