簡體   English   中英

我如何在 postgres 中加入 2 個單獨的連接?

[英]how do i join 2 seperate joins in postgres?

我正在學習 postgres 連接並且我一直在解決這個問題。 基本上我試圖加入由兩個連接派生的兩個表,但我收到以下錯誤:

錯誤:“join”處或附近的語法錯誤

第 3 行:mov1.genre_id = mov2.genre_id 上的內連接

select *
from(
    (select 
        id, genre_id
    from
        movie inner join in_genre on movie.id = in_genre.movie_id 
        where movie.id = 1375666) as mov1

    inner join on mov1.genre_id = mov2.genre_id

    (select 
        id, genre_id
    from
        movie inner join in_genre on movie.id = in_genre.movie_id 
        where movie.id = 0278504) as mov2
)

加入的順序在最后

select *
from 
    (select 
        id, genre_id
    from
        movie inner join in_genre on movie.id = in_genre.movie_id 
        where movie.id = 1375666) as mov1

    inner join 

    (select 
        id, genre_id
    from
        movie inner join in_genre on movie.id = in_genre.movie_id 
        where movie.id = 0278504) as mov2
 on mov1.genre_id = mov2.genre_id

如果您可以輕松地使用“表表達式”(又名“派生表”或“內聯視圖”),那么就去做吧。

但是,如果它們變得過於復雜,CTE(通用表表達式)就會派上用場。 您可以單獨構建每個表表達式,然后您可以連接它們。 通過這種方式,您可以逐步構建查詢。

例如:

with
mov1 as ( -- declaring the first table expression "mov1"
  select 
    id, genre_id
  from movie
  inner join in_genre on movie.id = in_genre.movie_id 
  where movie.id = 1375666
),
mov2 as ( -- declaring the second table expression "mov2"
  select 
    id, genre_id
  from movie
  inner join in_genre on movie.id = in_genre.movie_id 
  where movie.id = 0278504
)
select * -- finally the main SELECT looks a lot simpler
from mov1
join mov2 on mov1.genre_id = mov2.genre_id

作為旁注,CTE 可以在查詢中被任何后續 CTE 或主查詢重復使用多次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM