2017-08-07 20 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を返すクエリを持っています。 "所有者からのオーナーIDの選択WHERE name = 'josh';"これはownerID = 1を返します。ジョシュが所有するすべてのペットを返すクエリが必要です。この場合、petsOwnersテーブルに従って "m"、 "f"、 "h"になります。

答えて

0

お持ちの場合はownerId使用あなただけの所有者名を持っている場合は、その名前だけしたい場合は、すべての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 p.name 
FROM Pets p 
JOIN PetsOwners po 
    ON p.petID = po.petID 
WHERE po.ownerID = 1 

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

Exploit 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 
関連する問題