Очистка и упрощение вложенного оператора SQL
Я пытаюсь определить, есть ли лучший способ сделать это в SQL. Моя цель - запустить один запрос, который возвращает два значения, которые должны использоваться для другого запроса. Увидеть ниже
select *
from table2
where col1 =
( select col1
from table1
where id = 123 )
and col2 =
( select col2
from table1
where id = 123 );
Есть ли способ упростить этот код, выполнив where
предложение, которое проверяет оба значения по одному вложенному запросу, или запустив первый запрос и каким-либо образом установив значения col1
а также col2
переменные, которые я могу использовать во втором запросе?
4 ответа
Ты можешь сделать
select *
from table2
where (col1, col2) = (select col1, col2
from table1
where id = 123)
SELECT DISTINCT a.*
FROM table2 a
INNER JOIN table1 b
ON a.col1 = b.col1
AND a.col2 = b.col2
WHERE b.id = 123
Похоже, ты получил это задом наперед. Поскольку вы точно знаете, что вы хотите от table1 (поэтому, предположительно, запрос меньше), вам следует начать с получения данных из таблицы table1, а затем присоединить соответствующие строки из таблицы table2:
select table2.*
from table1
inner join table2
on table2.col1 = table1.col1
and table2.col2 = table1.col2
where table1.id = 123
Вы можете просто использовать запрос, как показано ниже
select t2.* from table2 t2,table1 t1 where t1.col1=t2.col1 and
t1.col2=t2.col2 and t1.id=123