我目前在db2中遇到以下表格的问题:
Table_1
A B C
1 2 1
2 1 2
3 2 2
4 1 1
Table_2
A
1
我想从table_1
中选择B
或C
大于A
的所有table_2
条记录。结果应该是:
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子句中仅发出一个subselect以提高性能?
答案 0 :(得分:1)
我会把它写成:
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
答案 1 :(得分:0)
如果这是你需要的,那么将子查询移到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;
答案 2 :(得分:0)
反之亦然:您希望所有不存在的table1记录表2记录的A值很高:
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中的每个记录和列运行相同的子查询。)