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