В любом случае использовать оператор IN в операторе SELECT? Если нет, то почему? - PullRequest
0 голосов
/ 24 апреля 2020

Это может прозвучать как запрос функции больше, чем что-либо другое, но было бы неплохо, если бы SQL разрешил использование оператора IN в операторе select, таком как приведенный ниже. Я хочу создать new_variable в table1 на основе переменной ID в table2, следовательно, оператор case.

select ID,
case when ID in (select ID
                 from table2)
     then 1
     else 0
     end as new_variable

from table1

Я понимаю, что SQL выдаст мне ошибку если я запускаю это, но почему это так? Мне не кажется очевидным, почему SQL разработчики не смогли разрешить использование оператора IN вне предложения WHERE.

Примечание: в настоящее время я использую левое соединение, чтобы избежать этой проблемы, поэтому я не зациклен на этом.

select ID,
       case when ifnull(b.ID, 0) = 0 then 0 
            else 1 
            end as variable_name

from table1

left join(select ID from table2) as b
on a.ID = b.ID

1 Ответ

1 голос
/ 24 апреля 2020

SQL определенно поддерживает это:

select ID,
       (case when ID in (select ID from table2)
             then 1 else 0
        end) as new_variable
from table1

Обратите внимание, что после id.

стоит запятая * Это стандартная SQL. Если ваша база данных не поддерживает ее, это запрос функции (и тот, который поддерживают все или почти все базы данных).

...