清理并简化嵌套的SQL语句

时间:2013-12-12 18:07:08

标签: sql oracle nested-queries

我正在尝试确定在SQL中是否有更好的方法来执行此操作。我的目标是运行一个查询,该查询返回两个用于另一个查询的值。见下文

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

有没有办法通过执行where子句来检查两个嵌套查询的值,或者通过运行第一个查询并以某种方式设置col1和{{的值来简化此代码1}}我可以在第二个查询中使用的变量吗?

4 个答案:

答案 0 :(得分:4)

你可以做到

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您可以简单地使用以下查询

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

答案 3 :(得分:0)

好像你已经倒退了。既然你确切地知道你想从table1中得到什么(所以,大概是,查询更小),你应该首先从table1获取数据,然后从table2加入相关的行:

select      table2.*
from        table1
inner join  table2
        on  table2.col1 = table1.col1
        and table2.col2 = table1.col2
where       table1.id = 123