不管怎样,在SELECT语句中使用IN运算符?如果没有,为什么



这可能更像是一个功能请求,但如果SQL允许在select语句中使用IN运算符(如下面的语句(,那就太好了。我想在table2中的ID变量的基础上,在table1中创建new_variable,从而生成case语句。

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

我知道如果我运行这个,SQL会给我一个错误,但为什么会这样呢?对于SQL开发人员为什么不能在WHERE子句之外使用IN运算符,我似乎并不清楚。

附带说明:为了避免这个问题,我目前正在使用左联接,所以我对此没有意见。

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

SQL肯定支持这一点:

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

请注意,id后面有一个逗号。

这是标准SQL。如果您的数据库不支持它,那么它就是一个功能请求(所有或几乎所有数据库都支持它(。

相关内容

最新更新