1

LEFT JOIN と GROUP BY を使用して、1 対多のマッピングを持つテーブルを組み合わせることができません。

一意の ID を持つ次のテーブルがあります (この例では、これは house_number です)

住宅:

|house_number| bedrooms|
|0           | 4       |
|1           | 3       |
|2           | 1       |

そして、一意の ID を使用して 2 番目のテーブルと LEFT JOIN したいのですが、2 番目のテーブルには一意の ID ごとに複数のエントリがある場合とない場合があります。例えば、

居住者:

| house_number | occupant_id | type    |
| 0            | 3           | 19      |
| 0            | 1           | 20      |
| 0            | 2           | 21      |
| 2            | 7           | 20      |

今私が達成したいのは、住宅番号ごとに正確に1つのエントリですが、LEFT JOINでタイプ20の居住者を優先し、居住者がリストされていない家も保持します。

|house_number| bedrooms| occupant_id | type    |
|0           | 4       | 1           | 20      |
|1           | 3       | null        | null    |
|2           | 1       | 7           | 20      |

GROUP BY を使用して、家ごとに 1 つのエントリのみを取得できますが、返された占有者の行 (存在する場合) がtype = 20.

単純に a を使用するWHERE (type = 20)と、house_number = 1 のエントリは返されません。

どうすればこのファイナル テーブルに到達できますか?

4

2 に答える 2

2

WHERE (type = 20 OR type is null)代わりに条件を試してみるのはどうですか?

于 2012-06-14T11:01:57.433 に答える
2
SELECT h.house_number,h.bedrooms
        , o.occupant_id,o.ztype
FROM houses h
LEFT JOIN occupants o ON h.house_number = o.house_number
        AND o.ztype =20
        ;

ところで、type は Postgres の予約語であるため、「type」を「ztype」に置き換える必要がありました。

于 2012-06-14T11:14:59.487 に答える