sql查询从不同的表中选择相同的数据,显示所有记录,但显示/显示匹配项

ufj5ltwl  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(382)

我有两个表,我想比较信息(为了得到从初始表到另一个我需要通过一个参考表)。我得到的结果,我正在寻找,除非当一个匹配被发现一个额外的数据行被添加(屏幕截图如下)。应该只有4行,我不明白为什么列1第5行中的值不只是添加到列1第4行。
任何帮助都将不胜感激。
代码

Select DISTINCT
 CASE
    WHEN LIC.ORDER_NUM = LN_STLIC.ORDER_NUMBER THEN LIC.ORDER_NUM 
    ELSE ''
END 'ORDER Number 1',
LN_STLIC.ORDER_NUMBER 'ORDER Number 2'
from LN_TABLE1 LN_STLIC 
    LEFT OUTER JOIN LN_REF LN_PDE_RTN on LN_STLIC.LNPID = LN_PDE_RTN.LNPID
    LEFT OUTER JOIN LN_TABLE2 LIC on LN_PDE_RTN.ID = LIC.ID 
where LIC.ID = '123456'

示例表数据
表1

参考号

表2

结果

i7uaboj4

i7uaboj41#

你的问题令人困惑:
我们可以用ln\u stlic和lic做一个简单的左连接:

Select CASE WHEN LN_STLIC.order_number = LIC.order_num THEN LIC.ORDER_NUM END ORD 
Number1, LN_STLIC.order_number ORD Number2
from LN_TABLE1 LN_STLIC 
LEFT OUTER JOIN LN_TABLE2 LIC ON LN_STLIC.order_number = LIC.order_num;

如果您想使用lic.id='1234',并且不需要使用distinct,那么执行下面的操作也可以得到相同的结果。

Select
CASE WHEN LIC.ORDER_NUM = LN_STLIC.ORDER_NUMBER THEN LIC.ORDER_NUM 
ELSE ''
END ORD_NBR_1,
LN_STLIC.ORDER_NUMBER ORD_NBR_2
from #LN_TABLE1 LN_STLIC 
LEFT OUTER JOIN #LN_REF LN_PDE_RTN on LN_STLIC.LNPID = LN_PDE_RTN.LNPID
LEFT OUTER JOIN #LN_TABLE2 LIC on LN_PDE_RTN.ID = LIC.ID AND 
LN_STLIC.ORDER_NUMBER =LIC.ORDER_NUM 
;
643ylb08

643ylb082#

你已经定义了 Order Number 1 作为

CASE
    WHEN LIC.ORDER_NUM = LN_STLIC.ORDER_NUMBER THEN LIC.ORDER_NUM 
    ELSE ''
END

所以,你可以合理地推断 Order Number 1 是空白的,因为 LIC.ORDER_NUM 不匹配 LN_STLIC.ORDER_NUMBER .
你要求对 Order Number 1 以及 Order Number 2 . 因此,数据中出现的这两个词的每一个组合,都只会出现一次。
因为 LN_TABLE1 对于相同的值有四个不同的订单号 LNPID ,您将生成3条空白记录 Order Number 1 以及 Order Number 2 设置为210414。但是 distinct 将只取一个,加上它们匹配的一个(示例中的记录4和5)。
你可能得加入 LIC.ORDER_NUM = LN_STLIC.ORDER_NUMBER 为了使订单号彼此匹配,并且仅获取订单号的1条记录 210414 .
如果我对你想要达到的目标有更多的了解,我可以给你一个更好的问题。

相关问题