2016-03-02 256 views
0

學生存儲學生姓名和朋友商店之間的學生關係列表。來自多對多關係的查詢

Create table Student (
id int NOT NULL AUTO_INCREMENT, 
name varchar(35), 
PRIMARY KEY (id) 
); 

insert into Student (name) values ('John'); 
insert into Student (name) values ('Kelly'); 
insert into Student (name) values ('Mary'); 

Create table Friend (
    id_from int NOT NULL REFERENCES Student(id), 
    id_to int NOT NULL REFERENCES Student(id), 
    PRIMARY KEY (id_from, id_to) 
); 

insert into Friend (id_from,id_to) values (1, 3); 
insert into Friend (id_from,id_to) values (1, 2); 
insert into Friend (id_from,id_to) values (3, 2); 

如何查詢「John」的所有朋友,例如,在MySql中?架構在這裏。

http://sqlfiddle.com/#!9/aeacd/1

+0

你有沒有嘗試過的東西?如果你有什麼地方迷路? – ArchiFloyd

+0

Select S.name FROM Student S JOIN Friend F ON S.id = F.id_from WHERE S.name ='John'。應該是這樣的。但是這返回兩個「約翰」,而不是他的朋友。 – user697911

回答

0

我已經創建了一個查詢。一般來說,您可以使用關係表與自己連接表。哪些查詢確實是加入StudentFriendStudent,然後用"John"選擇條目名稱Student.idFriend.id_from.

查詢之間的連接表看起來是這樣的:

SELECT * 
FROM Student as s1 
INNER JOIN Friend as f1 on s1.id = f1.id_from 
INNER JOIN Student as s2 on s2.id = f1.id_to 
WHERE s1.name = "John"; 

你可以試一下這裏:

http://sqlfiddle.com/#!9/aeacd/15

+0

真的很酷。你認爲這是這種情況下數據庫的一個很好的設計嗎? – user697911

+0

從我在大學的數據庫課程中記得的東西,這是我們被教會這樣做的方式。 – ArchiFloyd

+0

但是,如果我只想獲取朋友姓名列表,而不是四列。如何修改它?或者我如何訪問朋友的姓名字段? – user697911