sqlite ВЫБРАТЬ ГДЕ oldvalue-check, changevalue-check - PullRequest
0 голосов
/ 29 апреля 2020

В операторе SELECT я меняю поле «кошка» и поле «владелец». В конце этого SELECT, в предложении WHERE я ссылаюсь на «владельца» и «кошку»; используемые значения являются исходными значениями, в то время как я хочу первоначальный 'владелец', но измененное значение 'кошка'. Это утверждение

SELECT *,CASE WHEN persoon=2 THEN catlist ELSE cat END AS cat,CASE WHEN persoon=2 THEN 'ikke' ELSE owner END AS owner FROM object LEFT JOIN list ON (id=imgref AND persoon=2) WHERE (owner=0 OR persoon=2)AND (","||cat||",") LIKE "%,aap,%"

Это может выглядеть сложно, но в основном вы видите:

1. в первом случае ... КОНЕЦ, как я изменяю поле cat

во втором случае ... END Я меняю владельца поля

в поле WHERE, которым я пользуюсь owner и cat.

SQLITE использует в WHERE -claus исходные значения владельца и cat. Как я могу сослаться на значения измененного владельца или кошки?

Я решил это временно, введя новое поле CAT2:

...CASE WHEN persoon=2 THEN catlist ELSE cat END AS CAT2.........WHERE .......CAT2

вместо:

...CASE WHEN persoon=2 THEN catlist ELSE cat END AS cat..........WHERE..........cat

но мне интересно, могу ли я сказать что-то вроде:

...CASE WHEN persoon=2 THEN catlist ELSE cat END AS cat..........WHERE.........new-valued-cat

Спасибо за любую помощь ................. Эке ван Батенбург

1 Ответ

0 голосов
/ 29 апреля 2020

2 возможности ....

  1. 2 оператора case действуют на одни и те же данные, persoon = 2, это приведет к появлению одного псевдонима "owner" и перезаписи "cat" "

  2. SQLite должен разрешать использование псевдонима в предложении WHERE, но на всякий случай попробуйте заменить псевдоним на оператор CASE, если он работает правильно, то вы знаете свою версию не принимает псевдоним в предложении WHERE.

    ГДЕ (СЛУЧАЙ, КОГДА ЛИЧНО = 2, КОТОРЫЙ catlist, ЛИБО cat, END AS cat) = 0 ИЛИ (СЛУЧАЙ, КОГДА persoon = 2, THEN владелец 'ikke', ELSE, END AS владелец ) = 0 AND ("," || cat || "c") LIKE "%, aap,%"

...