【发布时间】:2017-02-23 05:09:40
【问题描述】:
假设 table_1 和 table_2 我有 2 个表 table_1 有 56 列和 120 万条记录 我的查询就像
table_1 喜欢
RollNumber | Subject | G | Part | Status
------------------------------------------------
1 | 1 | 1 | 1 | 1
1 | 1 | 1 | 2 | 1
1 | 2 | 1 | 1 | 1
1 | 2 | 1 | 2 | 5
1 | 3 | 1 | 1 | 0
1 | 3 | 1 | 2 | 1
2 | 1 | 2 | 1 | 1
2 | 1 | 2 | 2 | 1
2 | 2 | 2 | 1 | 1
2 | 2 | 2 | 2 | 1
2 | 3 | 2 | 1 | 1
2 | 3 | 2 | 2 | 1
3 | 1 | 2 | 1 | 1
3 | 1 | 2 | 2 | 1
3 | 2 | 2 | 1 | 1
3 | 2 | 2 | 2 | 1
3 | 3 | 2 | 1 | 0
3 | 3 | 2 | 2 | 1
我想要所有状态为 0 的 table_1 中的所有 RollNumber(按第 2 列和第 3 列分组),但不希望状态也为 5(或 1 以外)的学生
我试过了
select * from table_1 as t1
inner join table_2 as t2
on t1.column2 = t2.column2 and t1.column3 = t2.column3 and t1.column4 = t2.column4
where t1.column1 not in
(select column1 from table_1 where status = 5)
这是我的 qhole 查询中最里面的查询
我也试过 EXCEPT 子句
两个查询都需要很长时间才能执行
【问题讨论】:
-
为什么要使用子查询来过滤
status? -
请显示查询的execution plan。您是否为
column1、column2、column3和status添加了索引? -
@kennytm 我已编辑问题,请立即查看,谢谢
标签: sql sql-server join self-join notin