Mysql 选择从一个使用外键链接的表到多个表的查询
我的数据库由这些表组成Mysql 选择从一个使用外键链接的表到多个表的查询,mysql,database,select,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)
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..或任何一个字段)。
因此,如果我有一个id=1的用户,我需要搜索表subversions\u用户以获得所有subversions匹配,然后从中获得所有版本匹配,然后是所有产品匹配,以及所有不重复的,如此不同。我真的不知道从哪里开始像下面这样的事情,也许
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>>>;
选择不同的p.name
从产品中提取p
内部连接版本为p.id=v.product\u id上的v
v.id=s.version\u id上作为s的内部连接subversion
内部连接subversions\u用户\u连接为s.id=c.subversion\u id上的c
其中c.user_id=;
您熟悉联接吗?您想了解更多信息吗?我刚刚运行了它,结果是正确的,非常感谢