SQL SELECT 比较两个表中的值(不使用 UNION ALL)

SQL SELECT compare values from two tables (without UNION ALL)

我有 table T1:

ID  IMPACT
1     3

我有 table T2

PRIORITY URGENCY
   1        2

我需要从 T1 table 执行 SELECT。

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

我在某些 IBM 应用程序中工作,其中 只能 从第一个 table 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 

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

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

这假定子查询 return 是一行(或零行,在这种情况下,没有 returned)。如果子查询可以 return 多行,你应该问另一个问题,并非常明确地说明你想做什么。

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

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

我会用 exists:

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