2016-03-02 153 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