我正在加入一些查询表。
(PET)
| 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 |
(OWNER)
| 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 |
Kathy 不在结果中。我理解为什么。但我希望凯西能够参与其中。 我想让所有的主人出现,无论他们是否有宠物 - 以及那些与这次加入合并的人。
如何让所有OWNER表显示PET表连接中的所有所有者 - 无论他们在PET表中是否有宠物?
谢谢大家:)
答案 0 :(得分: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
答案 1 :(得分: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
请记住,左外部会返回联接“左”侧的所有记录,即使在联接的“右侧”没有匹配记录,也会返回“null”值那些领域。如您所见,“内部”连接仅 返回左侧和右侧都有匹配的记录。
希望能让你朝着正确的方向前进!
答案 2 :(得分:1)
使用外部加入
SELECT
OWNER.id, OWNER.owner_name, PET.pet_name, PET.size
FROM OWNER
Outer JOIN PET ON PET.owner_id = OWNER.id
答案 3 :(得分:1)
您正在以错误的顺序识别表格。从您想要所有结果的那个开始,然后将另一个表连接到它。这样你就可以看到主人和他们的狗,而不是狗和它们的主人。
FROM OWNER
LEFT JOIN PET
ON PET.owner_id = OWNER.id