如何根据其他 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 Patient
和 BirthToEyeAge
,利用 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 |
我有一些 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 Patient
和 BirthToEyeAge
,利用 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 |