2012-07-24 74 views
1

我正在將一些mysql查詢轉移到postgres,並且遇到了這個不起作用的過程。在多個表上執行左連接時遇到問題

select (tons of stuff) 
from trip_publication 

left join trip_collection AS "tc" on 
tc.id = tp.collection_id 

left join 
      trip_author ta1, (dies here) 
      trip_person tp1, 
      trip_institution tai1, 
      trip_location tail1, 
      trip_rank tr1 
    ON 
      tp.id = ta1.publication_id 
      AND tp1.id = ta1.person_id 
      AND ta1.order = 1 
      AND tai1.id = ta1.institution_id 
      AND tail1.id = tai1.location_id 
      AND ta1.rank_id = tr1.id 

該查詢似乎在「trip_author ta1」行上死去,我在上面標記了它。實際的錯誤信息是:

syntax error at or near "," 
    LINE 77: (trip_author ta1, trip_person tp1, ... 

我經歷了文檔,它似乎是正確的。我在這裏做錯了什麼?任何反饋將不勝感激。

回答

6

我不知道postgres,但在常規SQL中,您需要一系列LEFT JOIN語句而不是您的逗號語法。你似乎已經開始這個,然後在前兩個之後停止。

喜歡的東西:

SELECT * FROM 
table1 
LEFT JOIN table2 ON match1 
LEFT JOIN table3 ON match2 
WHERE otherFilters 

另一種方法是較舊的SQL語法:

SELECT cols 
FROM table1, table2, table3 
WHERE match AND match2 AND otherFilters 

有一個在你的SQL其他幾個小錯誤,如您忘記您tp別名的事實您的第一張表格,並試圖將where子句(ta1.order = 1)作爲連接約束。

我想這是你所追求的:

select (tons of stuff) 
from trip_publication tp 
left join trip_collection AS "tc" on tc.id = tp.collection_id 
left join trip_author ta1 on ta1.publication_id = tp.id 
left join trip_person tp1 on tp1.id = ta1.person_id 
left join trip_institution tai1 on tai1.id = ta1.institution_id 
left join trip_location tail1 on tail1.id = tai1.location_id 
left join trip_rank tr1 on tr1.id = ta1.rank_id 
where ta1.order = 1 
+0

工作就像一個魅力。謝謝! – 2012-07-30 19:00:35

1

你的左連接是每桌一個要加入

留下.... 加入trip_author TA1左連接上trip_person TP1。 ... 左連接上trip_institution ...

...等等