Saya mencoba melakukan kueri seperti ini ...

select * from table1 as t1
left join (
    select * from table2 as t2
    where t2.id = t1.t2_id
) as tt2
where tt2.value = 'SOME VALUE'

& saya mendapatkan kesalahan seperti ini...

ERROR: invalid reference to FROM-clause entry for table "t1"
  Hint: There is an entry for table "t1", but it cannot be referenced from this part of the query.

Pesan kesalahan itu benar-benar masuk akal, tetapi saya hanya ingin tahu apakah mungkin untuk mencocokkan nilai 't1' dengan 't2' mempertahankan struktur yang sama?

1
Aninda Sarker 4 April 2021, 15:30

1 menjawab

Jawaban Terbaik

Anda dapat menggunakan gabungan lateral sebagai gantinya jika Anda benar-benar menginginkan subquery yang berkorelasi:

select *
from table1 t1 left join lateral
     (select * 
      from table2 t2
      where t2.id = t1.t2_id
     ) tt2
     on 1=1
where tt2.value = 'SOME VALUE';

Perhatikan bahwa klausa where membatalkan gabungan kiri. Saya menduga Anda benar-benar menginginkan left join sederhana:

select *
from table1 t1 left join
     table2 t2
     on t2.id = t1.t2_id and t2.value = 'SOME VALUE';

Ini mengembalikan baris di t1 yang tidak memiliki baris yang cocok di t2 dengan 'SOME VALUE'. Jika Anda tidak menginginkannya, ubah left join menjadi inner join.

0
Gordon Linoff 4 April 2021, 12:34