选择具有多对多关系的查询

时间:2012-12-19 11:16:14

标签: python sql sqlite join many-to-many

我有数据库结构

CREATE TABLE man (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT
);


CREATE TABLE work (
    work_id INTEGER PRIMARY KEY,
);

CREATE TABLE manWork {
    man_id INTEGER,
    work_id INTEGER,
    FOREIGN KEY(man_id) REFERENCES man(id),
    FOREIGN KEY(work_id) REFERENCES work(work_id)
};

SELECT查询如果我想获得所有男人和每个男人的列表以及与那个男人相关的所有工作,将如何查询?

2 个答案:

答案 0 :(得分:2)

SELECT
    m.name
    , w.*
FROM
    man m
         INNER JOIN manWork mw ON m.id = mw.man_id
         INNER JOIN work w ON mw.work_id = w.work_id

不确定你的问题,但如果你想要所有男人,无论他们是否在manWork表中有记录,那么使用LEFT JOIN而不是INNER JOIN。

答案 1 :(得分:1)

JOIN表:

SELECT
  m.name,
  w.*
FROM manwork mw
INNER JOIN work w ON mw.work_id = w.work_id
INNER JOIN man  m ON mw.man_id  = m.id