当辅助表在左联接中返回null时,从主表获取记录

时间:2018-10-31 08:30:05

标签: sql-server sql-server-2008 sql-server-2005

我有两个表(使用Left Outer Join连接),主表总是有数据,而辅助表可能有或有很多没有数据的地方,使用where子句

我的问题是,当辅助表返回行时,如果辅助表返回行,则只有我的查询显示一些数据,然后我的查询也返回了行,但是我正在使用据我所知,尽管辅助表返回行,但我需要从主表获取数据。

select * from 
(
    SELECT Flag, [Description1], [group_code], [category_code]
    FROM Item_TMP
) b --Primary table
Left outer join
Base a --Seconday table
    on a.Part_ID = b.category_code
where b.category_code between 'A' and 'F'
AND b.type = 'Goods'

无论表2返回的行如何,我都需要有数据。

编辑

Item_TMP表

Flag   [Description1]   [group_code]   [category_code]
WO      Computers        FP               A
SO      LAptops          FP               F

基本表

part_id    quantity
 A           50
 F           100

现在基本表可能返回或不返回的地方

必需的输出

如果基本表返回数据,则

Flag   [Description1]   [group_code]   [category_code]  Sales
WO      Computers        FP               A              50
SO      LAptops          FP               F             100

如果基本表不返回数据

Flag   [Description1]   [group_code]   [category_code]  Sales
WO      Computers        FP               A              0
SO      LAptops          FP               F             0

2 个答案:

答案 0 :(得分:1)

您可以尝试使用ISNULLcoalesce函数

select b.*,coalesce(quantity,0) Sales
from 
(
    SELECT Flag, [Description1], [group_code], [category_code]
    FROM Item_TMP
) b --Primary table
Left join
Base a --Seconday table
    on a.Part_ID = b.category_code
where b.category_code between 'A' and 'F'
AND b.type = 'Goods'

答案 1 :(得分:1)

我将使用isnull()通过简单的左连接将其编写

select b.Flag, b.[Description1], b.[group_code], b.[category_code], 
isnull(a.quantity, 0) Sales
FROM Item_TMP b 
    Left join Base a  on a.Part_ID = b.category_code
where b.category_code between 'A' and 'F' 
    AND b.type = 'Goods'