在此SQL中,它仅返回在连接表中具有col的数据的行 (subst_Instructions)。但是我们希望它显示主表中的行,即使连接中没有数据也是如此。现在,它'因为SUBST_INSTRUCTIONS大概不是null的地方。 但没有它,它将不会显示该列的数据。有没有办法说SUBST_INSTRUCTIONS不是null和null?
SELECT * FROM
(
SELECT ID_KEY, [BATCH] AS column1, [IMPORTDATE], [DATEBILLED], [RX],
[DATEDISPENSED], [DAYSUPPLY], [PAYTYPE], [NPI],
[PHYSICIAN], [COST], [QUANTITY], [MEDICATION], A.[NDC], [PATIENTNAME],
[ROUTEOFADMIN], [INVOICECAT], [COPAY], [BRAND], [TIER], [SKILLLEVEL],
[STAT] STATUS, [LASTTASKDATE],SEQNO,B.[SUBST_INSTRUCTIONS],
ROW_NUMBER() OVER(PARTITION BY ID_KEY ORDER BY ID_KEY) rn
FROM [PBM].[T_CHARGES] A
LEFT OUTER JOIN [OGEN].[NDC_M_FORMULARY] B
ON A.[NDC] = B.[NDC]
WHERE [STAT] NOT IN (3, 4)
AND [TIER] <> 'T1'
) a
WHERE SUBST_INSTRUCTIONS IS NOT NULL -- rn = 1
答案 0 :(得分:0)
我会使用完全外连接而不是左外连接。
答案 1 :(得分:0)
确保WHERE子句中没有外连接表的任何字段。 [STAT]和[TIER]都属于主表吗?如果它们属于外连接表,则将条件放在ON子句中,而不是WHERE子句中。
答案 2 :(得分:0)
你是对的 - 将WHERE SUBSR_INSTRUCTIONS IS NOT NULL
应用于外部查询意味着它只会返回连接右侧有一行的行,因为它是连接右侧的一列。
通过将此条件转换为连接条件,它很容易解决这个问题。
但是,如果您的数据库引擎不支持多个连接条件,则应该加入子查询,如下所示
我们也不需要外部查询。以下是更改后的查询:
SELECT ID_KEY, [BATCH] AS column1, [IMPORTDATE], [DATEBILLED], [RX],
[DATEDISPENSED], [DAYSUPPLY], [PAYTYPE], [NPI],
[PHYSICIAN], [COST], [QUANTITY], [MEDICATION], A.[NDC], [PATIENTNAME],
[ROUTEOFADMIN], [INVOICECAT], [COPAY], [BRAND], [TIER], [SKILLLEVEL],
[STAT] STATUS, [LASTTASKDATE],SEQNO,B.[SUBST_INSTRUCTIONS],
ROW_NUMBER() OVER(PARTITION BY ID_KEY ORDER BY ID_KEY) rn
FROM [PBM].[T_CHARGES] A
LEFT OUTER JOIN
(
SELECT * FROM [OGEN].[NDC_M_FORMULARY]
WHERE [SUBST_INSRUCTIONS] IS NOT NULL -- <--- Note now only applies to
-- right hand side.
) B
ON A.[NDC] = B.[NDC]
WHERE [STAT] NOT IN (3, 4)
AND [TIER] <> 'T1'