连接显示空值

时间:2018-08-02 14:06:01

标签: sql sql-server sql-server-2008-r2

我有以下查询:

ORD_CODE     ORL_EVENT    ACT_ACT
22057         144933        20
22145         144933        30
22146         144933        40
22147         144933        50

它显示正确的数据,但是ACT_ACT不显示某些值(如10),因为在这种情况下ORD_CODE为null。

这就是我得到的:

ORD_CODE     ORL_EVENT    ACT_ACT
NULL          144933        10
22057         144933        20
22145         144933        30
22146         144933        40
22147         144933        50

我尝试使用LEFT或RIGHT联接,但没有任何变化。我想要这个:

ORD_CODE   
22057   
22145     
22146      
22147  

样本数据:

R5ORDERS表

ORL_ORDER     ORL_EVENT    ORL_PRICE      ORL_ORDQTY
22057         10            1000              2
22145         10              50             10
22146         10              25             5
22147         10              20             1  

R5ORDERLINES表

ACT_ORDER     ACT_ACT
NULL           10
22057          20
22145          30
22146          40
22147          50

R5ACTIVITIES表

declare @Orders table
(
    ORD_CODE int
)
insert @Orders values
(22057)
, (22145)
, (22146)
, (22147)

declare @OrderLine table
(
    ORL_ORDER int
    , ORL_EVENT int
    , ORL_PRICE int
    , ORL_ORDQTY int
)

insert @OrderLine values
(22057, 10, 1000,  2)
,(22145, 10,   50, 10)
,(22146, 10,   25, 5)
,(22147, 10,   20, 1) 

declare @Activities table
(
    ACT_ORDER int
    , ACT_ACT int
)

insert @Activities values
(NULL , 10)
, (22057, 20)
, (22145, 30)
, (22146, 40)
, (22147, 50)

以下是可消耗格式的样本数据,以便其他人可以使用。

tar -xf openshift-origin-server-v3.10.0-rc.0-c20e215-linux-64bit.tar.gz -C /opt/redhat

3 个答案:

答案 0 :(得分:0)

似乎您根本不​​需要left join

select r1.ACT_ORDER as ORD_CODE, r2.ORL_EVENT, r3.ACT_ACT
from R5ACTIVITIES r1 left join
     R5ORDERLINES r2
     on r2.ORL_ORDER = r1.ACT_ORDER left join
     R5ORDERS r3
     on r3.ORD_CODE = r2.ORL_ORDER;   

答案 1 :(得分:0)

尝试一下:

FROM R5ACTIVITIES LEFT join R5ORDERLINES on  ACT_ORDER = ORL_ORDER
                  RIGHT join   R5ORDERS on ORD_CODE = ORL_ORDER

答案 2 :(得分:0)

您正在R5ORDERS和R5ORDERLINES上使用内部联接。空值将不会显示,因为根据定义,内部联接会选择两个表中具有匹配值的记录。要显示所有ACT_ACT值,请从R5ACTIVITIES中选择,然后使用左联接将其他表联接到该表。