# postgreSQL - join lateral
###### tags: `sql`
```
--init tmp1
drop table if exists tmp1;
create temp table tmp1(name varchar, data int);
insert into tmp1(name,data )
values('report1', 10),('report2',20);
select * from tmp1;
-- init tmp2
drop table if exists tmp2;
create temp table tmp2(name varchar, data int);
insert into tmp2(name,data )
values('a', 10),('b',5),('c',15),('d',16),('e',3),('f',22);
select * from tmp2;
```
```
-- judge function
create or replace function func1(t2 int, t1 int)
returns boolean
as $$
declare
result boolean;
begin
if t2<t1 then
return True;
else
return False;
end if;
end
$$ language plpgsql;
```
```
-- join query
select
t1.name
,t1.data
,t2.name
,t2.data
from tmp1 t1
left join lateral(
select
*
from tmp2
where func1(tmp2.data,t1.data)
)t2 on True;
```
可以使用自定義function來判斷是否join
1. 不是所有join都可以使用join lateral
2. postgreSQL 叫做 join lateral, 其他SQL可能名稱不一樣