如何在子查询-SQL中重用列值
我有一个示例查询-如何在子查询-SQL中重用列值,sql,oracle,join,where-clause,Sql,Oracle,Join,Where Clause,我有一个示例查询- SELECT person_number, result_value, elementname FROM (SELECT prd.person_number, dependent.dob, dependent.person_id , dependent.payr
SELECT person_number,
result_value,
elementname
FROM (SELECT
prd.person_number,
dependent.dob,
dependent.person_id ,
dependent.payroll_id
FROM pay_pay_relationships_dn prd,
(SELECT dependent.person_id,
dependent.dob,
dependent.person_number
FROM dependent_tab dependent,
pay_payroll_rel_actions pra
WHERE pra.payroll_relationship_id =
dependent_tab.payroll_relationship_id
AND Trunc(sysdate) BETWEEN dependent.effective_start_date
AND
dependent.effective_end_date) dependent
WHERE dependent.payroll_id = prd.payroll_id
AND prd.effective_date BETWEEN :p_start_date AND :p_end_date)
是否有一种方法可以在子查询中使用ppa.effective_date-dependent而不是truncsystate您的查询没有定义别名ppa,因此让我假设您指的是prd.effective_date而不是ppa.effective_date 如果是,那么您描述的是横向连接。这在Oracle 12c版启动版本中得到支持,使用横向或交叉/外部应用语法:
请注意,我还在from子句到stanard中用逗号重写了隐式连接,带有on关键字的显式连接-隐式连接是几十年前的一种旧语法,不应该在新代码中使用。别名ppa在哪里定义?也许其中一个已经定义了?你是说珠三角生效日期?你为什么需要这个?此查询中不需要嵌套子查询。@SayanMalakshinov为什么会这样?您选择不使用正确、明确、标准、可读的联接语法有什么原因吗?至少OP显示的查询不需要侧向/交叉应用。由于横向视图解相关转换,您的查询将由CBO从横向连接重写为内部连接。隐式连接是一种古老的语法——基本上是原生Oracle语法,CBO将几乎所有ANSI显式连接转换为自己的原生语法。
SELECT
person_number,
result_value,
elementname
FROM (
SELECT
prd.person_number,
dep.dob,
dep.person_id ,
dep.payroll_id
FROM pay_pay_relationships_dn prd
CROSS APPLY (
SELECT
dep.person_id,
dep.dob,
dep.person_number
FROM dependent_tab dep
INNER JOIN pay_payroll_rel_actions pra
ON pra.payroll_relationship_id = dep.payroll_relationship_id
WHERE
dep.payroll_id = prd.payroll_id
AND prd.effective_date BETWEEN dep.effective_start_date AND dep.effective_end_date
) dep
WHERE prd.effective_date BETWEEN :p_start_date AND :p_end_date
) t