sql - 从相关或不相关的表中获取结果
问题描述
我在该表中有一个表 4 列 Id、FirmId、OfficeId、PlanID 数据如下所示
Id FirmId OfficeId PlanID
-----------------------------------------
1 54 NULL 4
2 54 3 9
3 54 5 8
4 54 6 6
5 54 7 9
6 54 8 8
我在 FirmOfficePlan 中有 4 表公司、办公室、计划、FirmOfficePlan 包含公司计划和办公室计划,如公司 54 有 10 个办公室 公司 54 有一个计划 id = 4 和办公室 id = NULL
但是在 Office of 54 的某些部分有不同的计划,例如 Office 3 的计划 ID = 9,Office 5 的计划 ID = 8,Office 6 的计划 ID = 6
所以办公室的其他人有一个推荐计划= 4(这是为公司配置的)
所以我想得到下面所有办公室的结果
Id FirmId OfficeId PlanID
--------------------------------------
1 54 1 4
1 54 2 4
2 54 3 9
3 54 5 8
4 54 6 6
5 54 7 9
6 54 8 8
1 54 9 4
1 54 10 4
我有 80000 多家公司和 30 到 40 个办公室,在这种情况下,每家公司的工作速度会很慢
以下是我的查询,但我不满意
SELECT A.Firm_Id,
A.Office_id,
PricingPlanId = COALESCE(B.PlanId,A.PlanId)
FROM (SELECT A.Firm_Id,O.Office_id,A.PlanId
FROM Firm F
Inner Join Office O ON O.Firm_Id = F.Firm_Id
Left Join FirmOfficePlan A ON A.Firm_Id = F.Firm_ID
AND A.Office_Id IS Null
WHERE F.Firm_ID = 54)A
LEFT JOIN FirmOfficePlan B ON A.Firm_ID = B.Firm_ID
AND A.Office_id = B.Office_Id
AND B.Office_Id IS NOT NULL
解决方案
推荐阅读
- flutter - Flutter 可以选择在小部件树中包含/排除父小部件
- jquery - 加载时删除类和禁用属性
- sql-server - 我可以检查每个 ID 号的条件,然后在 T-SQL 中的新列中返回结果吗
- xml - XPath:如何将函数的返回值保存在变量中?
- azure-devops - 在 Azure DevOps Pipelines 中找不到管道向导
- jmeter - 无法使用 graphql 发送 Jmeter 请求,使用有效 URL 的 400 响应
- ssis - 如何获取 SSIS 包中的所有表名?
- html - Transparent Scrollbar Is Not Rendering Child Items Behind It
- reactjs - 带有反应钩子的值流
- windows - 是否可以使用 net-core 创建独立的可执行文件?