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   |

凯西不在结果中。我明白为什么。但我希望凯西出现在结果中。我希望所有所有者都出现,无论他们是否有宠物 - 以及那些确实与此加入合并的所有者。

如何让所有 OWNER 表显示与 PET 表连接的所有所有者 - 无论他们是否在 PET 表中有宠物?

感谢大家 :)

4

4 回答 4

6

使用 LEFT JOIN 而不是 INNER

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

您需要使您的联接成为 LEFT OUTER JOIN 而不是 INNER JOIN。

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

请记住,即使在连接的“右”侧没有匹配的记录,左外部也会返回连接“左”侧的所有记录,并为这些字段返回“空”值。如您所见,“内部”连接返回左右两边都匹配的记录。

希望这能让你朝着正确的方向前进!

于 2013-02-22T19:07:23.390 回答
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 回答
0

您以错误的顺序识别表格。从您想要所有结果的那个开始,然后将另一个表连接到它。这样你就看到了主人和他们的狗,而不是狗和他们的主人。

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