2017-08-07 52 views
0

我有3个表。在3个不同的表上的MySql查询

业主:

ownerID name 
    1 josh 

宠物:

petID name 
    1 M 
    2 x 
    3 f 
    4 h 

PetsOwners:

petID ownerID 
    1  1 
    3  1 
    4  1 

我有一个从一个人返回OWNERID查询。 “SELECT ownerID FROM Owners WHERE name ='josh';”这将返回ownerID = 1。我需要一个返回josh拥有的所有宠物的查询。在这种情况下,根据petsOwners表将为“m”,“f”和“h”。

回答

0

如果你有ownerId使用

SELECT p.name 
FROM Pets p 
JOIN PetsOwners po 
    ON p.petID = po.petID 
WHERE po.ownerID = 1 

如果你只有所有者名称,需要参加所有3个表

SELECT p.name 
FROM Pets p 
JOIN PetsOwners po 
    ON p.petID = po.petID 
JOIN Owners o 
    ON po.ownerID = o.ownerID 
WHERE o.name = 'josh' 
+0

这很好。我如何添加到这个查询ExoticPet表和ExoticOwners? – Alfre

0

如果你只是想自己的名字:

SELECT Pets.name 
FROM Pets, PetsOwners, Owners 
WHERE Pets.petID = PetsOwners.petID 
AND Owners.ownerID = PetsOwners.ownerID; 
+1

推广使用'JOIN' sintaxis,Aaron Bertrand写了一篇不错的文章[踢坏坏习惯:使用旧式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/关于它的坏习惯 - 踢 - 使用 - 旧式 - 连接.aspx)。 –

0

试试这个:

select a.ownerID,a.`name`as OwnerName, b.petID,b.`name` as PetName from 
(select ownerID `name` from Owners) as a 
right join 
(select a.petID,a.`name`,OwnerID from 
(select petID,`name` from Pets) as a 
left JOIN 
(select petID,OwnerID from PetsOwners) as b 
on a.petID = b.petID) as b 
on a.ownerID = b.OwnerID