SQL SELECT сравнивает значения из двух таблиц (без UNION ALL) - PullRequest
0 голосов
/ 09 мая 2018

У меня есть таблица T1:

ID  IMPACT
1     3

У меня есть таблица T2

PRIORITY URGENCY
   1        2

Мне нужно сделать SELECT из таблицы T1.

Я хотел бы получить все строки из T1, где IMPACT больше, чем PRIORITY из T2.

Я работаю в каком-то приложении IBM, где возможно только начинать с оператора SQL после предложения WHERE из первой таблицы T1.

Таким образом, запрос (к сожалению) всегда должен начинаться с "SELECT * FROM T1 WHERE..." Это нельзя изменить (имейте это в виду).

Это означает, что я не могу использовать некоторые операторы JOIN или UNION ALL после части "FROM T1", потому что я могу начать писать SQL-запрос только после предложения WHERE.

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

Но я получаю ошибку за это утверждение. Пожалуйста, можно ли написать SQL-запрос, начинающийся с:

SELECT * FROM T1
WHERE 

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Я бы использовал exists:

select t1.* 
from t1 
where exists (select 1 from t2 where t1.IMPACT > t2.PRIORITY);
0 голосов
/ 09 мая 2018

Вы хотите подзапрос, поэтому все, что вам нужно, это круглые скобки:

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)
...