pqとpeの 2 つのテーブルがあります。LEFT OUTER JOIN
左テーブル ( pq ) を右テーブル ( pe )にしようとしています。
- pqには主キー列IDがあります
- peには 2 列の主キーがあるため、多くの pqid がある場合とない場合があります。
- pe .uid 列を使用して、関連データのみを抽出する必要があります (
WHERE pe.uid = "12345"
) - pe .data はすべてのpq .id 行に結合する必要があります
テーブルの外観は次のとおりです。
pq:
id | data
1 | "abc"
2 | "efg"
pe:
pqid | uid | data
2 | 54321 | "uvw"
2 | 12345 | "xyz"
次のクエリを使用して、pq .id の最初の 2 行をpe .pqidに一致させることができます
SELECT pq.id, pq.data, pe.data FROM pq
LEFT OUTER JOIN pe ON pq.id = pe.pqid
ORDER BY pq.id LIMIT 2
私は得る:
pq.id | pq.data | pe.data
1 | "abc" |
2 | "efg" | "uvw"
しかし、WHERE ステートメントを次のように使用すると、次のようになります。
SELECT pq.id, pq.data, pe.data FROM pq
LEFT OUTER JOIN pe ON pq.id = pe.pqid
WHERE pe.uid='12345'
ORDER BY pq.id LIMIT 2
一致するpe .pqid AND pe .uidを持つ 1 つの行のみを取得します。
pq.id | pq.data | pe.data
2 | "efg" | "xyz"
したがって、WHERE 句を使用すると、正しいpe .data を取得できますが、 pe .pqidに一致するpq .idを持たないpq行は取得されません。
私はこれを取得する必要があります:
pq.id | pq.data | pe.data
1 | "abc" |
2 | "efg" | "xyz"