如何根据其他 table 值自动导出属性值

How to derive an attribute value automatically based on other table values

我有一些 table 并且想根据其他 table 间隔值填充数据库属性。

基本思路是根据患者的年龄使用以下值填充 'eye-age' 属性:年轻、早生前或生前。

我有患者 table 的生日,需要根据患者的生日用 BirthToEyeAge 中的值填充最后一个属性,从而推断其年龄。

我该怎么做,或者我应该阅读哪些文档来了解这些类型的内容。

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, ??? );

您可以加​​入 table PatientBirthToEyeAge,利用 handy postgres function age() 来计算患者被诊断时的年龄。这是一个基于此逻辑的 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;

在这个demo on DB Fiddle中,创建tables,初始化它们的内容,以及运行上面的查询,内容Diagnostic 是:

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