sql查询仅显示在连接中具有匹配项的行

时间:2014-02-11 14:07:55

标签: sql

在此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

3 个答案:

答案 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'