SELECT查询从一个表与外键链接到多个表

时间:2015-07-19 13:31:58

标签: mysql database select

我的数据库由这些表组成

    products(
    id INT(10) AUTO_INCREMENT,
    name VARCHAR(16) NOT NULL, 
    PRIMARY KEY (id)
);

/*      ^
    One |
       To
        | Many
        v
*/
versions(
        id INT(10) AUTO_INCREMENT,
        product_id INT(10)
        name VARCHAR(16) NOT NULL, 
        PRIMARY KEY (id),
        FOREIGN KEY (product_id) REFERENCES products(id)
    );


 /*      ^
        One |
           To
            | Many
            v
    */
    subversions(
                id INT(10) AUTO_INCREMENT,
                version_id INT(10)
                name VARCHAR(16) NOT NULL, 
                PRIMARY KEY (id),
                FOREIGN KEY (version_id) REFERENCES versions(id)
            );
/*      ^
    Many|
       To
        | Many
        v
*/
users(
                id INT(10) AUTO_INCREMENT,
                name VARCHAR(16) NOT NULL, 
                password VARCHAR(32) NOT NULL,
                PRIMARY KEY (id),
            );

然后我有

subversions_users_conjuction(
                    id INT(10) AUTO_INCREMENT,
                    subversion_id VARCHAR(16) NOT NULL, 
                    user_id VARCHAR(32) NOT NULL,
                    PRIMARY KEY (id),
                    FOREIGN KEY (subversion_id) REFERENCES subversions(id),
                    FOREIGN KEY (user_id) REFERENCES users(id)

);

我正在努力解决的问题是根据当前用户获取products.name(和id..or无论哪个归档)。 所以,如果我有一个id = 1的用户,我需要搜索表subversions_users以获得匹配的所有子版本,然后从匹配的所有版本,然后匹配的所有产品和所有没有重复的产品,所以DISTINCT。我真的不知道从哪里开始

1 个答案:

答案 0 :(得分:2)

可能会出现以下情况?

SELECT DISTINCT p.name
FROM products AS p
    INNER JOIN versions AS v ON p.id = v.product_id
    INNER JOIN subversions AS s ON v.id = s.version_id
    INNER JOIN subversions_users_conjuction AS c ON s.id = c.subversion_id
WHERE c.user_id = <<<ID>>>;