SQL 对非规范化表的查询

SQL query on denormalized tables

我有下面提到的这两个非规范化 table,没有任何数据限制。 Records_audit 不会有重复的基于 audit_id 的行,尽管 table 没有任何限制。

我将需要 SQL 查询来提取 records_audit 的所有字段,并使用来自第二个 table 的附加匹配列 refgroup_Name 使用来自两个 [=] 的 AuditID 的匹配条件37=]s,printedCount 大于 1 且 R_status 为 'Y'。我尝试使用左连接,但它正在选择所有记录。

你能帮我纠正一下问题吗?我尝试使用以下查询,但它从第二个 table:

中选择了所有不需要的
SELECT a.*, d.refgroup_Name 
from Records_audit a  
left join Patients_audit d ON ( (a.AUDITID=d.AUDITID ) 
                            and (a.printedCount> 1) 
                            AND (a.R_status='Y')
  )  
ORDER BY 3 DESC

Records_audit:

AuditID record_id created_d_t patient_ID branch_ID R_status printedCount
1 Img77862 2020-02-01 08:40:12.614 xq123 aesop96 Y 2
2 Img87962 2021-02-01 08:40:12.614 xy123 aesop96 Y 1

Patients_audit:

AuditID dept_name visited_d_t patient_ID branch_ID emp_No refgroup_Name
1 Imaging 2020-02-01 11:41:12.614 xq123 aesop96 976581 finnyTown
1 EMR 2020-02-01 12:42:12.614 xq123 aesop96 976581 finnyTown
2 Imaging 2021-02-01 12:40:12.614 xy123 himpo77 976581 georgeTown
2 FrontOffice 2021-02-01 13:41:12.614 xy123 himpo77 976581 georgeTown
2 EMR 2021-02-01 14:42:12.614 xy123 himpo77 976581 georgeTown

一个left join会给你“左边”table的所有记录,也就是fromtable。由于您没有 where 子句来约束查询,因此您将获得 Records_audit.

中的所有记录

有关联接的更多信息,请参阅 Visual Representation of SQL Joins

如果您的目的是获取 Records_audit 中具有 Y 的 R_status 和 printedCount > 1 的所有记录,请将它们放入 where条款。

select ra.*, pa.refgroup_name 
from records_audit ra  
left join patients_audit pa on ra.auditId = pa.auditId
where ra.printedCount > 1
  and ra.r_status = 'Y'
order by ra.created_d_t desc

这将匹配 Records_audit 中匹配 where 子句的所有记录。 left join 确保它们匹配,即使它们没有匹配的 Patients_audit 记录。

其他说明:

  • 您的 order by 3 依赖于在 Records_audit 中声明列的顺序。如果您想按 records_audit.created_d_t 订购,请写 order by a.created_d_t.
  • 如果您的查询是对数据做出假设,请添加一个约束以确保它为真并保持为真。