Oracle:以互斥的方式使用两个表的最佳方法是什么?

时间:2015-04-30 01:22:55

标签: sql oracle

我有以下示例查询

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 |

还有许多其他表格。但是我现在仅针对这种情况将其缩短为四张桌子。

1 个答案:

答案 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