繁体   English   中英

DB2-Where子查询

[英]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

我想选择BC大于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM