总而言之,我有几家公司拥有多个站点和多个部门。每个部门都有一个或多个网站。我正在重复使用所有公司的部门和网站表格。我基本上拥有一个全球性的分支机构和网站,供每家公司使用。我的最终目标是将所有属于公司分部的网站都拉出来。MySQL根据附加表的条件选择行
Company 1
|
+ Division 1
| |
| + Site 1
| + Site 2
|
+ Division 2
|
Company 2
|
+ Division 3
| |
| + Site 3
| + Site 2
|
+ Division 1
|
公司
+----+-------------+
| id | name |
+----+-------------+
| 1 | company 1 |
+----+-------------+
| 2 | company 2 |
+----+-------------+
网站
+----+-------------+
| id | name |
+----+-------------+
| 1 | site 1 |
+----+-------------+
| 2 | site 2 |
+----+-------------+
| 3 | site 3 |
+----+-------------+
部门
+----+-----------------+
| id | name |
+----+-----------------+
| 1 | division 1 |
+----+-----------------+
| 2 | division 2 |
+----+-----------------+
| 3 | division 3 |
+----+-----------------+
company_divisions
+----------+--------------+
| company | division |
+----------+--------------+
| 1 | 1 |
+----------+--------------+
| 1 | 2 |
+----------+--------------+
| 2 | 1 |
+----------+--------------+
| 2 | 3 |
+----------+--------------+
个
company_sites
+----------+------------+
| company | site |
+----------+------------+
| 1 | 1 |
+----------+------------+
| 1 | 2 |
+----------+------------+
| 2 | 2 |
+----------+------------+
| 2 | 3 |
+----------+------------+
我本来以为我可以选择全部由company.id
和division.id
制约sites
的,但我已经没有这样的运气。我试图子查询:
select *
from sites
where id IN (select site from company_sites where company = 3)
,并加入:
select s.*
from sites s
inner join company_sites cs on s.id = cs.site
where cs.company = 3
但这些结果仅与company_site
而不是division
。我似乎无法弄清楚如何获得company_divisions
表参与..这样的事情:
select s.*
from sites s
inner join company_sites cs on s.id = cs.site
inner join company_divisions cd on divisions.id = cd.division
where cs.company = 2 AND cd.division = 3
我如何添加,以确保一个附加条件或查询,同样的company.id
这是用来选择site
在company_sites
涉及company.id
在company_division
通过division.id
?
例如给出company.id = 2
和division.id = 3
我期望site 2
和site 3
的结果。
建设性的批评总是值得欢迎的。
你应该以取回属于师网站站点或反之亦然部门的一些映射.. – RohitS
@RohitS我考虑添加一个divsion_site表,但问题是多家公司可以使用相同的部门。也许我应该减少诱饵,让每家公司都住在自己的数据库中? – atomSmasher
最后的电话是你的,但如果你有多个相同的部门,你的目标是从属于一个公司的一个部门获取所有的网站,但仍然是这样。 – RohitS