这可能更像是一个功能请求,但如果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。如果您的数据库不支持它,那么它就是一个功能请求(所有或几乎所有数据库都支持它(。