我的数据库由这些表组成
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。我真的不知道从哪里开始
答案 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>>>;