我有以下示例查询
select a.name,c.company
from employee a, company c
where a.comp_id = c.comp_id
and a.active='Y'
现在我有两张新表
company_profile ,(每家公司的资料值。每家公司可能有也可能没有此表中的数据)
profile_defaults (包含独立于公司的每个配置文件项的默认配置文件值)
现在我需要在特定公司的 company_profile 中引用“ show_data ”列。如果该公司没有行,那么我需要从 profile_defaults 表中获取值。如何以最佳方式将此逻辑集成到我上面提到的第一个查询中。
表
员工
|名称| Comp_id |活性|
公司
| Comp_id |名称|
COMPANY_PROFILE
| comp_profile_id | PROFILE_ID | comp_id | PROFILE_NAME | profile_value |
Profile_Defaults
| PROFILE_ID | PROFILE_NAME | profile_value |
还有许多其他表格。但是我现在仅针对这种情况将其缩短为四张桌子。
答案 0 :(得分:0)
尝试使用此查询:
SELECT a.name, c.company, NVL(cp.profile_value, pd.profile_value)
FROM employee a INNER JOIN company c
ON a.comp_id = c.comp_id
LEFT JOIN company_profile cp
ON c.comp_id = cp.comp_id
LEFT JOIN profile_defaults pd
ON cp.profile_id = pd.profile_id
此解决方案假定您在comp_id
和默认company_profile
表中都有列profile_defaults
,您可以将这些列加入给定公司的记录。正如@ PM77-1所述,我使用NVL()
首先检查company_profile
表,如果前者没有找到,则默认为profile_defaults
。