Database 如何基于其他表值自动派生属性值

Database 如何基于其他表值自动派生属性值,database,postgresql,populate,Database,Postgresql,Populate,因此,我有一些表,希望基于其他表间隔值填充数据库属性 基本思想是用值填充“眼龄”属性:年轻、老年前期或老年前期,具体取决于患者的年龄 我有患者表birthdate,需要使用BirthToEyeAge的值填充最后一个属性,该值基于患者birthdate,推断其年龄 我怎样才能做到这一点,或者我应该阅读哪些文档来学习这类东西。 提前感谢每一位参与者 INSERT INTO BirthToEyeAge(bId, minAge , maxAge , eyeAge) VALUES(1, 0

因此,我有一些表,希望基于其他表间隔值填充数据库属性

基本思想是用值填充“眼龄”属性:年轻、老年前期或老年前期,具体取决于患者的年龄

我有患者表birthdate,需要使用BirthToEyeAge的值填充最后一个属性,该值基于患者birthdate,推断其年龄

我怎样才能做到这一点,或者我应该阅读哪些文档来学习这类东西。 提前感谢每一位参与者

INSERT INTO BirthToEyeAge(bId, minAge , maxAge , eyeAge)        
VALUES(1, 0, 28 , 'young')
VALUES(2, 29, 59, 'probyotic')
VALUES(3, 60, 120, 'pre-probyotic')


INSERT INTO Patient( patId, firstName, lastName, birthDate )
VALUES( 1, 'Ark', 'May', '1991-7-22' );


INSERT INTO Diagnostic( diagId, date, tear_rate, consId_Consulta, eyeAge )
VALUES( 1, '2019-08-10', 'normal', 1, ??? );

您可以将表
Patient
BirthToEyeAge
联接,利用来计算患者诊断时的年龄。下面是一个基于此逻辑的
insert
查询:

insert into Diagnostic( diagId, date, tear_rate, consId_Consulta, eyeAge )
select d.*, b.bId
from
    (select 1 diagId, '2018-08-10'::date date, 'normal' tear_rate, 1 consId_Consulta ) d
    inner join patient p 
        on d.consId_Consulta = p.patId
    inner join BirthToEyeAge b 
        on extract(year from age(d.date, p.birthDate)) between b.minAge and b.maxAge;
在此中,在创建表、初始化其内容并运行上述查询后,
诊断的内容为:

| diagid | date                     | tear_rate | consid_consulta | eyeage |
| ------ | ------------------------ | --------- | --------------- | ------ |
| 1      | 2018-08-10T00:00:00.000Z | normal    | 1               | 1      |

它工作得很好。因为我需要字符串,所以只将b.bId更改为b.eyeAge。但它工作得很好。非常感谢你!欢迎@IvanRosa!很高兴这有帮助。