MySQL内部联接帮助 - 希望包含没有匹配的行

KDa*_*awg 0 mysql inner-join

我有几张桌子正在加入查询.

(宠物)

| 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   |
Run Code Online (Sandbox Code Playgroud)

(所有者)

| id |  owner_name  |
--------------------
| 1  |    Jeff      |
| 2  |   (Kathy)    |
| 3  |    Tom       |
Run Code Online (Sandbox Code Playgroud)

当我像这样做一个内部联接:

SELECT 

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

FROM OWNER

INNER JOIN PET ON PET.owner_id = OWNER.id
Run Code Online (Sandbox Code Playgroud)

我得到这样的结果:

| 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   |
Run Code Online (Sandbox Code Playgroud)

凯西不在结果中.我理解为什么.但我希望凯西能够参与其中.我想让所有的主人出现,无论他们是否有宠物 - 以及那些与这个联接合并的人.

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

感谢大家 :)

Muh*_*eel 7

使用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
Run Code Online (Sandbox Code Playgroud)