我遇到这种情况:
一个名为“服务”的表和另一个“公司”:
services
------------
id
code
companies_id
companies
------------
id
parent_id
样本记录:
services
---------------
id code companies_id
1 s1 1
2 s2 1
3 s3 2
4 s4 2
5 s5 3
6 s6 3
companies
---------------
id parent_id
1 0
2 1
3 0
服务与 companies_id 与公司相关。这样一家公司可能会有0到N个服务。
公司可能有子公司,因此这些公司与其父母有 parent_id 。
我需要的是查询以获取与给定公司(id:1)及其子公司相关的服务中的任何记录。
我应该得到这个(公司1及其子公司2的服务):
services
------------------
id code companies_id
1 s1 1
2 s2 1
3 s3 2
4 s4 2
这是我的尝试,但我似乎没有得到正确的行数:
SELECT *
FROM services
INNER JOIN companies ON services.companies_id = companies.id
LEFT JOIN companies as children_companies ON services.companies_id = children_companies.id
WHERE (companies.id =1 OR children_companies.parent_id = 1)
有什么建议吗?
答案 0 :(得分:1)
这应该有效
select b.id, b.code, b.companies_id from companies a
join services b on a.id = b.companies_id
where b.companies_id = 1 or a.id in
(select id from companies c where c.parent_id = 1)