在视图 SQL-ORACLE 中创建子查询
Posted
技术标签:
【中文标题】在视图 SQL-ORACLE 中创建子查询【英文标题】:Create a subquery in a view SQL- ORACLE 【发布时间】:2019-07-29 20:58:19 【问题描述】:我正在设置一个数据库视图。
我有一个表 PERSON 和一个由 person_id 关联的 RELATION_COMPANY。我正在尝试从关系公司获取每个 person_id 的最短日期。
我需要使用子查询吗?
这是我迄今为止尝试过的。
CREATE OR REPLACE VIEW PEOPLE_ADDRESS
select
p.id as ADDRESS_CODE,
case p.type_
when 1 then 'JURIDICAL'
when 0 then 'NATURAL'
end PERSON_TYPE,
(select min(start_date) from relation_company where relation_company.person_id = p.id) as INITIAL_dATE
P.ID as PERSON_CODE,
p.ADDRESS_NAME as ADDRESS,
p.POSTAL_CODE as POSTAL_CODE,
case P.COUNTRY_ID
when 68 then 'NO'
else 'YES'
end FOREIGN_INDICATOR
from
PERSON p join relation_company r on relation_company = p.id ;
这是我的人表:
ID TYPE_ ADDRESS_NAME NAME OTHER COLUMNS
1 0 AVENUE SMITH, 19 MICHAEL SCOTT ....
2 1 OXFORD STREET , 119 COMPANY A ....
3 1 CHESTHAM ROAD, 7 COMPANY B ....
这是 RELATION_COMPANY 表:
ID PERSON_ID START_DATE
1 1 2016-12-12 00:00:00
2 1 1981-07-09 00:00:00
3 2 1991-10-10 00:00:00
4 2 1981-03-09 00:00:00
5 3 1984-07-05 00:00:00
6 3 1981-08-11 00:00:00
7 3 1987-07-09 00:00:00
8 3 2011-07-09 00:00:00
select min(START_DATE) from RELATION_COMPANY group by PERSON_ID;
结果应该是:
ADDRESS_CODE PERSON_TYPE INITIAL_dATE other columns
1 NATURAL 1981-07-09 00:00:00 ....
2 JURIDICAL 1981-03-09 00:00:00 ....
3 JURIDICAL 1981-08-11 00:00:00
我想获取每个 person_id 的 min(start_date) 并将其打印到视图的 INITIAL_dATE 列。
我无法创建该查询。
【问题讨论】:
【参考方案1】:您已经有了解决方案,此查询在您的 SELECT 语句中缺少“person_id”列。 更改此查询
select min(START_DATE) from RELATION_COMPANY group by PERSON_ID;
到这里。
select min(START_DATE),PERSON_ID from RELATION_COMPANY group by PERSON_ID;
希望这会有所帮助。
【讨论】:
【参考方案2】:您的解决方案不需要子查询。 只在您的查询中添加一个组子句。
喜欢这个:
select
p.id as PERSON_ID,
case p.type_
when '1' then 'JURIDICAL'
when '0' then 'NATURAL'
end PERSON_TYPE,
min(start_date) as INITIAL_dATE,
p.ADDRESS_NAME as ADDRESS,
p.POSTAL_CODE as POSTAL_CODE,
case P.COUNTRY_ID
when 68 then 'NO'
else 'YES'
end FOREIGN_INDICATOR
from PERSON p join relation_company r on r.person_id = p.id
group by p.id, type_, ADDRESS_NAME, POSTAL_CODE, P.COUNTRY_ID;
【讨论】:
以上是关于在视图 SQL-ORACLE 中创建子查询的主要内容,如果未能解决你的问题,请参考以下文章