如何在不使用 NOT IN 的情况下优化 SQL 查询

乌托尔夏尔马

我有这张Student桌子:

Id   companyId    status
----------------------------------------
101  1001         In-Progress
102  1001         In-Progress
103  1001         Final
104  1002         In-Progress   
105  1003         Pending With Company 
106  1003         In-Progress
107  1004         In-Progress
108  1004         In-Progress 
109  1005         In-Progress
110  1005         Completed
111  1006         In-Progress
112  1006         Canceled
113  1007         In-Progress
114  1007         Pending with Student 

我想在这些条件下输出:

  1. 状态为“进行中”
  2. 如果有重复的 companyId,则其他允许的状态已完成、已取消(基本上只允许状态的组合为进行中、已完成和已取消)

在上述条件下,o/p 将如下所示:

Id   companyId    status
--------------------------------
104  1002         In-Progress   
107  1004         In-Progress
108  1004         In-Progress 
109  1005         In-Progress
111  1006         In-Progress

我们可以通过使用 NOT IN 来实现这一点

SELECT * 
FROM student
WHERE status = 'In-Progress' 
  AND companyId NOT IN (SELECT companyId FROM student 
                        WHERE status IN ('Final', 'Pending With Company ', 'Pending with Student'));

但我正在寻找一种不使用NOT IN.

列夫格尔曼

您可以使用左连接并选择不匹配的行来实现它:

   SELECT * FROM student a LEFT JOIN 
   ( SELECT companyId FROM student WHERE status in
   ('Final','Pending With Company ','Pending with Student')) b
   on a.companyid=b.companyId 
   where b.companyId is null
   and a.status = 'In-Progress' 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spark SQL:如何在不使用rdd.cache()的情况下缓存SQL查询结果

如何在不使用模型的情况下使用Entity Framework执行原始SQL查询?

在我使用 SQL Server 2012 的情况下进行查询优化的可能性

给定情况下的SQL查询优化

如何在不使用PIVOT的情况下以列vs值而不是行的方式获取sql select查询结果

如何在不使用 SQL Server 中的 where 查询的情况下从第 5 行中选择记录

如何在不使用 for 循环的情况下将我的简单 psycopg2 SQL SELECT 查询转换为更好的查询?

在这种情况下,如何编写SQL查询?

在以下情况下如何构造sql查询?

SQL查询在某些情况下无法使用某些时间

有没有办法在不使用 CTE 的情况下进行递归 SQL 查询?

在不使用笛卡尔连接的情况下组合许多 sql 查询的结果

如何在不进行动态查询的情况下对字符串进行SQL查询

如何在不使用ORM的情况下使用SQLAlchemy查询从表中删除行?

如何在不使用ORM的情况下使用SQLAlchemy查询从表中删除行?

如何在不使用多个子查询的情况下使用多列选择多行

如何在不使用循环的情况下使用filter()查询集

如何在不使用Postgres中的UPDATE查询的情况下更新记录

如何在不使用_layout查询字符串参数的情况下重新加载页面

如何在不使用OFFSET的情况下从特定的文档编号开始Firestore查询?

如何在不使用Requestly更改查询参数的情况下更改URL的域?

如何在不使用PHP的情况下基于列的值编辑此mySQL查询?

如何在不使用查询参数的情况下显示临时成功消息?

如何在不使用不同关键字的情况下提高以下查询的性能

如何在不使用多个查询的情况下更新数据库中的数据?

如何在不使用临时表的情况下避免频繁查询相同的字段?

如何在不使用媒体查询的情况下更改元素的宽度?

如何在不使用子查询的情况下选择具有where条件的不同记录

如何在不使用 UNION 的情况下进行此查询?