多个到多个,连接表,数据库结构的新手

时间:2011-10-18 09:22:25

标签: database sqlite database-design

请随意对此发表评论,因为我是新手,对于如何构建此内容非常困惑。 我想创建一个有兴趣的人的数据库。我想记录他们的兴趣,然后看看人们有什么共同的兴趣并展示他们。

我有3个表:Person,Interest,InterestType

人是一张人 利息是一个人可以拥有的利益。 InterestType是兴趣的名称,比如滑雪或骑自行车。 (我将它分开是因为我希望所有人都使用共同的利益排版)

我的设置如下:

personTable:id,name,interestID

interestTable:id,interestType,personID

interestType:id,name

如何获得具有相同兴趣的人员列表?

2 个答案:

答案 0 :(得分:1)

我在Access中创建了一个简单的模型,但您应该能够将其“转换”为SQLite而不会出现太多问题。

假设:

PersonTable
personId    Name
1           Paolo
2           Carla
3           Angelo
4           Franco
5           John
6           Lisa

InterestType
interestId  Name
1           Calligraphy
2           Karate
3           Chess
4           Movies
5           Hiking

InterestTable
interestId  personId
1             1
2             1
3             1
2             2
3             2
4             2
1             3
2             3
1             5

按兴趣名称排序,然后按人名称排序的简单查询应该可以解决问题:

SELECT interestType.Name, personTable.Name
FROM personTable INNER JOIN 
(interestType INNER JOIN interestTable ON
 interestType.interestId=interestTable.interestId) 
ON personTable.personId=interestTable.personId
ORDER BY 1, 2;

将返回:

interestType.Name   personTable.Name
Calligraphy            Angelo
Calligraphy            John
Calligraphy            Paolo
Chess                  Carla
Chess                  Paolo
Karate                 Angelo
Karate                 Carla
Karate                 Paolo
Movies                 Carla

如果您想查找特定兴趣,只需添加where子句:

SELECT interestType.Name, personTable.Name
FROM personTable INNER JOIN 
(interestType INNER JOIN interestTable ON interestType.interestId=interestTable.interestId) 
ON personTable.personId=interestTable.personId
WHERE interestType.Name="Karate"
ORDER BY 1, 2;


interestType.Name   personTable.Name
Karate                 Angelo
Karate                 Carla
Karate                 Paolo

答案 1 :(得分:0)

试试这个..

SELECT * FROM personTable pt
 INNER JOIN interestTable it
    ON pt.id = it.id
 WHERE it.interestType = "theInterestType";