7

私はいくつかのMysqlクエリをPostgresqlに移動している最中であり、機能しないこのクエリに遭遇しました。

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_authorta1」行で終了しているようです。実際のエラーメッセージは次のとおりです。

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

ドキュメントを確認しましたが、正しいようです。私はここで何を間違っているのですか?フィードバックをいただければ幸いです。

4

2 に答える 2

10

LEFT JOINpostgresはわかりませんが、通常のSQLでは、コンマ構文ではなく一連のステートメントが必要になります。あなたはこれを開始し、最初の2つの後に停止したようです。

何かのようなもの:

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うとしたなど、他にもいくつかの小さなエラーがあります。whereta1.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
于 2012-07-24T17:40:53.467 に答える
2

左結合は、結合しているテーブルごとに1つです。

left join trip_author ta1 on ....
left join trip_person tp1 on ....
left join trip_institution on ...

...等々

于 2012-07-24T17:42:51.453 に答える