0

ルックアップに参加しているテーブルがいくつかあります。

(ペット)

| id | owner_id |  pet_name   | size |
--------------------------------------
| 1  |    1     |   Sparky    |  L   |
| 2  |    1     |    Spot     |  L   |
| 3  |    3     |   FooFoo    |  M   |
| 4  |    3     |    Barky    |  L   |
| 5  |    3     |    Jeb      |  S   |

(オーナー)

| id |  owner_name  |
--------------------
| 1  |    Jeff      |
| 2  |   (Kathy)    |
| 3  |    Tom       |

次のような内部結合を行うと:

SELECT 

OWNER.id, OWNER.owner_name, PET.pet_name, PET.size

FROM OWNER

INNER JOIN PET ON PET.owner_id = OWNER.id

次のような結果が得られます。

| id |  owner_name  |  pet_name   | size |
------------------------------------------
| 1  |     Jeff     |   Sparky    |  L   |
| 1  |     Jeff     |    Spot     |  L   |
| 3  |     Tom      |   FooFoo    |  M   |
| 3  |     Tom      |    Barky    |  L   |
| 3  |     Tom      |    Jeb      |  S   |

キャシーは結果に含まれていません。理由はわかりました。しかし、私はキャシーが結果に出てほしい. ペットを飼っているかどうかに関係なく、すべての所有者に表示してもらいたいです。

ペット テーブルにペットがいるかどうかに関係なく、すべての所有者を PET テーブルと結合して表示するには、どのようにすればよいですか?

みんな、ありがとう :)

4

4 に答える 4

6

INNER の代わりに LEFT JOIN を使用する

SELECT
  OWNER.id,
  OWNER.owner_name,
  PET.pet_name,
  PET.size
FROM OWNER
  LEFT JOIN PET
    ON PET.owner_id = OWNER.id
于 2013-02-22T19:06:54.610 に答える
4

結合を INNER JOIN ではなく LEFT OUTER JOIN にする必要があります。

SELECT OWNER.id, OWNER.owner_name, PET.pet_name, PET.size
  FROM OWNER
  LEFT OUTER JOIN PET 
    ON PET.owner_id = OWNER.id

アウターは、結合の「右側」に一致するレコードがなくても、結合の「左側」にあるすべてのレコードを返し、それらのフィールドに「null」値を返すことに注意してください。ご覧のとおり、「内部」結合は、左側と右側の両方に一致するレコードのみを返します。

それがあなたを正しい方向に押し上げることを願っています!

于 2013-02-22T19:07:23.390 に答える
0

テーブルを間違った順序で識別しています。すべての結果が必要なテーブルから始めて、他のテーブルをそのテーブルに左結合します。そうすれば、犬とその飼い主ではなく、飼い主とその犬を見ていることになります。

FROM OWNER
LEFT JOIN PET
ON PET.owner_id = OWNER.id
于 2013-02-22T19:08:55.787 に答える
0

外部結合を使用する

SELECT 

OWNER.id, OWNER.owner_name, PET.pet_name, PET.size

FROM OWNER

Outer JOIN PET ON PET.owner_id = OWNER.id
于 2013-02-22T19:07:24.273 に答える