SQL SELECT比较两个表中的值(没有UNION ALL)

时间:2018-05-09 11:12:34

标签: sql db2 where where-clause

我有表T1:

ID  IMPACT
1     3

我有表T2

PRIORITY URGENCY
   1        2

我需要从T1表中进行SELECT。

我想从T1获取所有行,其中IMPACT大于T2的PRIORITY。

我正在一些IBM应用程序中工作,只能从第一个表T1的WHERE子句开始使用SQL语句。

所以查询(不幸的是)必须始终以"SELECT * FROM T1 WHERE..."开头 这是无法改变的(请注意这一点)。

这意味着我不能在"FROM T1"部分之后使用某些JOIN或UNION ALL语句,因为我只能在WHERE子句之后开始编写SQL查询。

SELECT * FROM T1
WHERE 
IMPACT> SELECT PRIORITY FROM T2 WHERE URGENCY=2

但是我收到了这个声明的错误。 请问是否可以从以下开始编写SQL查询:

SELECT * FROM T1
WHERE 

2 个答案:

答案 0 :(得分:3)

你想要一个子查询,所以你只需要括号:

SELECT * 
FROM T1
WHERE IMPACT > (SELECT T2.PRIORITY FROM T2 WHERE T2.URGENCY = 2)

这假定子查询返回一行(或零行,在这种情况下不返回任何内容)。如果子查询可以返回多行,则应该提出另一个问题,并明确说明要执行的操作。

一个合理的解释(对于多行)是:

SELECT * 
FROM T1
WHERE IMPACT > (SELECT MAX(T2.PRIORITY) FROM T2 WHERE T2.URGENCY = 2)

答案 1 :(得分:2)

我会使用exists

select t1.* 
from t1 
where exists (select 1 from t2 where t1.IMPACT > t2.PRIORITY);