如何在where子句中使用内部选择变量

时间:2015-12-09 09:18:17

标签: sql postgresql

我有2张桌子

table : tab1
id serial primary key
val integer

table : tab2
id serial primary key
val2 integer

现在我尝试了这个查询

select id, (select id from tab2) as id2 from tab1

工作正常。但是当我尝试在id2子句中使用where时,它会给出错误。

select id, (select id from tab2) as id2 from tab1 where id2 = id

3 个答案:

答案 0 :(得分:1)

除非我不明白,否则它应该如此简单:

select T1.id
,      T2.id as id2 
from   tab1 T1
join   tab2 T2
    ON T1.id = T2.id

根据评论进行修改 我对mysql语法不是很熟悉,但是你不能把查询放在子查询中吗?像:

select   *
from     (select id, (select id from tab2) as id2 from tab1) a
where    a.id = a.id2

答案 1 :(得分:1)

根据OP' comment试试这个

select * from (
select arr, unnest('{1,2,3}'::int[]) as val 
from tab1 
)t
where val = any(arr)

答案 2 :(得分:0)

您不能在select子句中使用where语句中的别名。在您的查询中,id2是别名列名称。因此,您无法使用where id2 = id。但你可以使用

select id, (select id from tab2) as id2 
from tab1 where id = (select id from tab2);

或使用JOIN查询。

select tab1.id,tab2.id
from tab1, tab2
where tab1.id = tab2.id;