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