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);
我有 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);