在sqlite中加入多对多的表

时间:2013-05-14 18:10:15

标签: sql database sqlite

我有以下数据库架构:

create table people (
    id integer primary key autoincrement,
);

create table groups (
    id integer primary key autoincrement,
);

我已经有哪些人是哪个组的成员在一个单独的文件中(让我们说在(person idgroup id的元组中)。我如何构建我的数据库模式,这样很容易访问一个人的组,也很容易访问组的成员?阅读我目前拥有的元组是困难和缓慢的,所以我希望这是以数据库形式。我不能有像{{1 }},member1等作为列,因为组中的人数目前是无限的。

1 个答案:

答案 0 :(得分:15)

将文本文件移动到数据库表中

CREATE TABLE groups_people (
  groups_id integer,
  people_id integer,
  PRIMARY KEY(group_id, people_id)
);  

并选择所有属于第7组成员的人

SELECT * FROM people p  
  LEFT JOIN groups_people gp ON gp.people_id = p.id  
  WHERE gp.groups_id = '7';

并选择人5所在的所有组

SELECT * FROM groups g  
  LEFT JOIN groups_people gp ON gp.groups_id = g.id  
  WHERE gp.people_id = '5';