Многократные, Соединительные таблицы, Новичок в Структуре Базы данных - PullRequest
0 голосов
/ 18 октября 2011

Пожалуйста, не стесняйтесь комментировать это, поскольку я новичок и очень запутался в том, как это структурировать.Я хочу создать базу данных людей с интересами.Я хочу зафиксировать свои интересы, а затем посмотреть, какие у людей есть общие интересы, и отобразить их.

У меня есть 3 таблицы: Person, Interest, InterestType

Person - это таблица людей Интерес - это интерес, который может иметь человек.InterestType - это название интереса, скажем, катание на лыжах или велосипеде.(Я разделил его, потому что я хочу, чтобы все люди использовали общий набор типов интересов)

Моя настройка выглядит следующим образом:

personTable: id, name, InterestID

InterestTable:id, InterestType, personID

InterestType: ID, имя

Как получить список людей с одинаковыми интересами?

Ответы [ 2 ]

1 голос
/ 18 октября 2011

Я сделал простую модель в 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
0 голосов
/ 18 октября 2011

Попробуйте это ..

SELECT * FROM personTable pt
 INNER JOIN interestTable it
    ON pt.id = it.id
 WHERE it.interestType = "theInterestType";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...