[英]DB2 - Where Subquery
我目前在db2中有以下表的问题:
Table_1
A B C
1 2 1
2 1 2
3 2 2
4 1 1
Table_2
A
1
我想选择B
或C
大于table_2
最大的A
所有table_1
记录。 结果应为:
Query
A B C
1 2 1
2 1 2
3 2 2
我目前通过此查询实现的目标:
select A, B, C
from Table_1
where B > (select max(A) from Table_2)
or C > (select max(A) from Table_2)
是否可以仅在where子句中发出一个子选择来提高性能?
我将其写为:
select A, B, C
from Table_1
where MAX(B,C) > (select max(A) from Table_2)
注意:未经测试,因为我没有方便的DB2数据库。
它在MySQL语法中的SQLfiddle中: http ://sqlfiddle.com/#!9/2f89c5/3
如果这是您所需要的,则将子查询移至FROM
子句:
select t1.A, t1.B, t1.C
from Table_1 t1 cross join
(select max(A) as maxA from table_2) t2
where t1.B > t2.maxA or t1.C > t2.maxA;
反之亦然:您希望所有不存在 table2记录且其A值都较大的table1记录:
select *
from table_1
where not exists
(
select *
from table_2
where table_2.a >= table_1.b
and table_2.a >= table_1.c
);
顺便说一句:仅拥有一个子查询对于维护就非常有用。 只需在一个地方进行更改即可。 但为了提高速度:在您的查询中,子查询与主查询不相关,因此它可能仅运行一次,其结果将应用于所有检查。 (这很愚蠢,DBMS是否对table_1中的每个记录和列一次又一次地运行相同的子查询。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.