首页 > 解决方案 > 如果条件,sqlite 创建值为 1 的列

问题描述

我有一张表(T1),如下所示:

user   fruit
A      orange
A      banana
B      cherry
B      banana
C      grape

其中一组水果由橙子、香蕉、樱桃和葡萄组成。

然后,我有第二张表 (T2) 列出所有用户,所有可能的结果如下:

user   fruit
A      orange
A      banana
A      cherry
A      grape
B      orange
B      banana

is_orange我的目标是在第二个表上创建一个新列,1如果该行fruitorange. 像这样:

user   fruit   is_orange
A      orange      1
A      banana      0
A      cherry      0
A      grape       0
B      orange      1
B      banana      0

目前,我的查询如下所示:

    SELECT *,
        CASE
            WHEN EXISTS (
                SELECT * FROM T1 AS t1
                WHERE t1.user = T2.user AND t1.fruit = T2.fruit
            )
            THEN 1
            ELSE 0
        END AS is_orange
     FROM T2

查询有效,它做我想要的。但是,它很慢,在我看来,有点难以理解。

是否有另一种方法可以使用更快和“更清洁”的方法来实现相同的结果?

标签: sqlsqlite

解决方案


如果该行的水果是橙色的,我的目标是在第二个表上创建一个值为 1 的新列 is_orange。像这样:

我看不出table这个问题有什么关系。因此:

select t2.*,
       (case when fruit = 'orange' then 1 else 0 end) as is_orange
from t2;

推荐阅读