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的所有记录,也就是from
table。由于您没有 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
.
- 如果您的查询是对数据做出假设,请添加一个约束以确保它为真并保持为真。
我有下面提到的这两个非规范化 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的所有记录,也就是from
table。由于您没有 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
. - 如果您的查询是对数据做出假设,请添加一个约束以确保它为真并保持为真。