sql - 如果条件,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
如果该行fruit
是orange
. 像这样:
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
查询有效,它做我想要的。但是,它很慢,在我看来,有点难以理解。
是否有另一种方法可以使用更快和“更清洁”的方法来实现相同的结果?
解决方案
如果该行的水果是橙色的,我的目标是在第二个表上创建一个值为 1 的新列 is_orange。像这样:
我看不出table
这个问题有什么关系。因此:
select t2.*,
(case when fruit = 'orange' then 1 else 0 end) as is_orange
from t2;
推荐阅读
- kotlin - 调用 createnewFile 时出现 IOException,但路径函数正在工作。我已经获得了存储权限
- sql - ORA-00942 找不到表
- reactjs - 如何为网页的首次访问者创建分步教程(React)?
- java - Eclipse添加外部Jar(websocket)
- javascript - 从一个组件路由到另一个 reactjs
- docker - 从 Gitlab 13.11.4 升级到 Gitlab 14.2.3
- node-notifier - 节点通知器在生产模式下不起作用
- java - Spring应用程序中的SaveAll方法
- node.js - Node读取文件时的空响应
- reactjs - 如何在 useState 挂钩中有多个状态