Question

I'm trying to determine if there is a better way to do this in SQL. My goal is to run one query which returns two values that are to be used for another query. See below

select * 
from table2
where col1 = 
    ( select col1
      from table1
      where id = 123 )
and col2 =
    ( select col2
      from table1
      where id = 123 );

Is there a way to simplify this code by either doing a where clause that checks both values against one nested query, or by running the first querying and somehow setting the values of col1 and col2 to variables that I can use in the second query?

Was it helpful?

Solution

You can do

select *
  from table2
 where (col1, col2) = (select col1, col2
                         from table1
                        where id = 123)

OTHER TIPS

SELECT  DISTINCT a.*
FROM    table2 a
        INNER JOIN table1 b
            ON a.col1 = b.col1
                AND a.col2 = b.col2
WHERE   b.id = 123 

you can simply use query as below

select t2.* from table2 t2,table1 t1 where t1.col1=t2.col1 and 
t1.col2=t2.col2 and t1.id=123

Seems like you've got it backwards. Since you know exactly what you want from table1 (so, presumably, the query is smaller), you should start by getting the data from table1, then join the releveant rows from table2:

select      table2.*
from        table1
inner join  table2
        on  table2.col1 = table1.col1
        and table2.col2 = table1.col2
where       table1.id = 123
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top