首页 > 解决方案 > SQL SELECT 比较两个表中的值(没有 UNION ALL)

问题描述

我有表 T1:

ID  IMPACT
1     3

我有桌子 T2

PRIORITY URGENCY
   1        2

我需要从 T1 表中进行 SELECT。

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

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

所以查询(不幸的是)必须始终以"SELECT * FROM T1 WHERE..." This cannot be changed 开头(请记住这一点)。

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

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

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

SELECT * FROM T1
WHERE 

标签: sqldb2wherewhere-clause

解决方案


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

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)

推荐阅读