sql >> データベース >  >> RDS >> PostgreSQL

1つのクエリで複数のテーブルに複数の左結合

    この種のクエリは機能するはずです-明示的なJOINで書き直した後 構文:

    SELECT something
    FROM   master      parent
    JOIN   master      child ON child.parent_id = parent.id
    LEFT   JOIN second parentdata ON parentdata.id = parent.secondary_id
    LEFT   JOIN second childdata ON childdata.id = child.secondary_id
    WHERE  parent.parent_id = 'rootID'
    

    ここでのトリッピングワイヤーは、明示的なJOIN 「古いスタイル」の前にバインドCROSS JOIN カンマ付き( , )。 ここでマニュアルを引用します:

    最初の結合を書き直した後、すべての結合が左から右に適用され(論理的には、Postgresはクエリプラン内のテーブルを自由に再配置できます)、機能します。

    私の主張を述べると、これもうまくいくでしょう:

    SELECT something
    FROM   master parent
    LEFT   JOIN second parentdata ON parentdata.id = parent.secondary_id
    ,      master child
    LEFT   JOIN second childdata ON childdata.id = child.secondary_id
    WHERE  child.parent_id = parent.id
    AND    parent.parent_id = 'rootID'
    

    ただし、明示的なJOIN あなたのケースがもう一度説明するように、構文は一般的に好ましいです。

    また、複数の(LEFTJOIN 行を増やすことができます:



    1. Oracleの文字列の空白(改行およびタブスペース)をトリムする

    2. SHOW TABLESを使用してビューではなくテーブルのみを取得するにはどうすればよいですか?

    3. 把握するのを手伝ってください(内側?)参加する

    4. PostgreSQLでのAcos()のしくみ