1

我想通过为嵌套查询分配“变量名”来重写以下查询。

select lastname 
  from table2 
 where firstname = (select name from table1 where val="whatever")

我希望查询看起来像这样:

( select name 
    from table1 
   where val = "whatever") as retrieved_name;

select lastname 
  from table2 
 where firstname = retrieved_name

纯SQL可以吗?

4

3 回答 3

3

纯SQL可以吗?

不。

您没有“纯 SQL”的变量。您可以使用 Oralce-PL\SQL 等设置变量。

于 2012-05-06T12:18:31.000 回答
1

有点,如果您愿意使用 ajoin而不是子选择并且您使用 MySQL,您可以使用 CTE(通用表表达式):

with retrieved_name as ( 
  select name 
    from table1 
   where val = "whatever" 
         )
select lastname
  from table2 t2
  join retrieved_name t1
    on t2.firstname = t1.name

正如 a_horse_with_no_name 所指出的,这与:

select lastname
  from table2 t2
  join ( select name 
           from table1 
           where val = "whatever" ) t1
    on t2.firstname = t1.name

实际上,我更喜欢第二个示例的内联视图而不是 CTE,除非查询很荒谬,但这只是个人喜好。

于 2012-05-06T12:29:30.650 回答
0

你可以做这样的事情

select name as retrieved_name from table1 where val="whatever"); select lastname from table2 where firstname=retrieved_name

于 2012-05-06T12:25:48.553 回答