Очистка и упрощение вложенного оператора 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
Другие вопросы по тегам