我这里有一个问题 - 它会给我一些不是这些诊断代码的行。但患者也可以拥有它们。
我需要没有这3个代码的患者 V72.31','Z01.411','Z01.419'。
SELECT distinct "Vouchers"."Patient_ID"
FROM (("Ntier_70751"."PM"."Service_Diagnoses" "Service_Diagnoses"
INNER JOIN "Ntier_70751"."PM"."Services" "Services"
ON "Service_Diagnoses"."Service_ID"="Services"."Service_ID")
INNER JOIN "Ntier_70751"."PM"."Diagnosis_Codes" "Diagnosis_Codes"
ON "Service_Diagnoses"."Diagnosis_Code_ID"="Diagnosis_Codes"."Diagnosis_Code_ID")
INNER JOIN "Ntier_70751"."PM"."Vouchers" "Vouchers" ON "Services"."Voucher_ID"="Vouchers"."Voucher_ID"
WHERE "Diagnosis_Codes"."Diagnosis_Code" not in ('V72.31', 'Z01.411', 'Z01.419')
答案 0 :(得分:1)
您想要的结果尚不清楚。
这将显示患有"无效"代码,只要它们至少有一个代码不在您的排除列表中:
SELECT DISTINCT
v.Patient_ID
FROM
Ntier_70751.PM.Service_Diagnoses sd
INNER JOIN Ntier_70751.PM.Services s
ON sd.Service_ID = s.Service_ID
INNER JOIN Ntier_70751.PM.Diagnosis_Codes dc
ON sd.Diagnosis_Code_ID = dc.Diagnosis_Code_ID
AND dc.Diagnosis_Code not in ('V72.31', 'Z01.411', 'Z01.419')
INNER JOIN Ntier_70751.PM.Vouchers v
ON s.Voucher_ID= v.Voucher_ID
这个将排除至少有一个"无效"代码(不管他们可能拥有的其他"有效"代码):
SELECT DISTINCT
v.Patient_ID
FROM
Ntier_70751.PM.Vouchers v
WHERE
v.Patient_ID NOT IN
(
SELECT DISTINCT
v.Patient_ID
FROM
Ntier_70751.PM.Service_Diagnoses sd
INNER JOIN Ntier_70751.PM.Services s
ON sd.Service_ID = s.Service_ID
INNER JOIN Ntier_70751.PM.Diagnosis_Codes dc
ON sd.Diagnosis_Code_ID = dc.Diagnosis_Code_ID
AND dc.Diagnosis_Code in ('V72.31', 'Z01.411', 'Z01.419')
INNER JOIN Ntier_70751.PM.Vouchers v
ON s.Voucher_ID= v.Voucher_ID
)
答案 1 :(得分:-1)
你为什么要尝试这种无阻碍的加入?我确信这是一种更有效的做事方式。但是,我们需要更准确地描述您尝试实现的目标。
问题是应用限制WHERE子句的范围。你基本上是在说
SELECT . . .
FROM (THIS
JOIN THAT
JOIN (THEOTHERONE WHERE . . .))
当你真正需要的是:
SELECT . . .
FROM (THIS JOIN THAT JOIN THEOTHERONE)
WHERE . . .
通过构建多向连接,您可以选择并处理可能包含这些不需要的诊断代码的其他元组。做你的选择("选择"意味着在哪里; SELECT实际上是"投影" [在SQL的创建者中选择的关键字不当)。
这是一个建议。今天,您要拒绝诊断代码匹配的记录,例如A,B或C;明天您可能还想拒绝诊断代码与P或Q匹配的记录。您应该通过这个来使它成为表 - 驱动:创建第二个表
CREATE TABLE REJECTION_CATEGORY( CATEG, DIAGN_CODE )
PRIMARY KEY( CATEG, DIAGN_CODE )
并使用以下查询对其进行初始化:
INSERT INTO REJECTION_CATEGORY VALUES( 1, 'V72.31 ),
VALUE ( 1, 'Z01.411' ),
VALUES( 1, 'Z01.419' )
然后您可以将您的第一个查询更改为:
SELECT . . .
FROM (join-of-this-and-that)
WHERE DIAGNOSIS_CODE NOT IN (
SELECT DIAGN_CODE
FROM REJECTION_CATEGORY
WHERE CATEG = 1)
和明天的查询拒绝完全不同的诊断代码集,只更改最后一行,但只读一行 WHERE CATEG = 2 。