SQL 查询更新空字段以匹配另一个表中的字段

问题描述 投票:0回答:1

我正在尝试更新 HFSQL 数据库中的日期字段。在

Patient
表中有一个
Patient.PatInserted
字段,其中一些记录为空白。患者 ID 为
Patient.PatID
。我正在尝试填充
Patient.PatInserted
字段以匹配另一个表中最旧的记录。该表称为
Test
,此处的记录使用
Patient
绑定到
Test.TesPatIDFK
表。我想将每位患者最旧的
Test.TesInserted
记录插入到他们的
Patient.PatInserted
记录中。

我是 SQL 新手,我无法让选择查询仅显示最旧的

Patient.PatInserted
记录。我正在尝试获取每个人的最旧记录
TesPatIDFK
。我现在尝试只执行 SELECT 部分。

这是我最新的 SELECT 查询代码:

SELECT
  DISTINCT Patient.PatID,
  Patient.PatInserted,
  Patient.PatSalutation,
  Test.TesPatIDFK,
  Test.TesInserted 
FROM 
  Patient JOIN Test ON Patient.PatID = Test.TesPatIDFK
WHERE
  Patient.PatID = Test.TesPatIDFK
AND
  Test.TesInserted = (SELECT MIN(Test.TesInserted) FROM Test)
AND
  Patient.PatInserted LIKE ''

这是表结构的基本视图。我相信

PatInserted
TesInserted
是时间戳,只是格式略有不同:

      Patient
___________________
PatID | PatInserted
___________________
1,626 | 
___________________
   2  | 16/02/2021
                  Test
_______________________________________
TesID | TesPatIDFK |    TesInserted
_______________________________________
 1303 |    1,626   |25/10/1201 15:04:34
_______________________________________
  8   |     2      |16/02/2021 14:05:51

这是我查询的结果:

PatID | PatInserted | TesPatIDFK |    TesInserted
______________________________________________________
1,626 |             |    1,626   | 25/10/1201 00:00:00
sql sql-update
1个回答
0
投票
  1. 您想要更新 Patient 表中的 PatInserted 列,因此
    update patient set patinserted = ... where ...
  2. 您想要更新空的 PatInserted。这应该是一个时间戳,所以我希望
    where patinserted is null
    。但是,您可以使用
    PatInserted LIKE ''
    ,它假设 PatInserted 是一个字符串,并且该字符串不为 null,而是空字符串。无论如何,
    LIKE
    似乎没有多大意义。
    LIKE
    进行模式匹配。如果您正在寻找平等,请使用
    =
    。如果列是字符串,则应将其更改为
    TIMESTAMP
    并使用
    where patinserted is null
  3. 为了找到 PatID 的最小 TesInserted,请使用相关子查询(相关 = 通过引用其 ID 与更新行相关)。

完整声明:

update patient 
set patinserted = 
(
  select min(test.tesinserted) 
  from test
  where text.tespatidfk = patient.patid
)
where patinserted is null;
© www.soinside.com 2019 - 2024. All rights reserved.