SQL查询SELECT来自不同表的相同数据,显示所有记录,但显示/显示匹配

SQL Query SELECT same data from different tables, show all records, but show / display matches

我有两个 table 我想比较信息(为了从最初的 table 到另一个我需要通过参考 table) . 我得到了我正在寻找的结果,除非找到匹配项时会添加额外的一行数据(下面的屏幕截图)。应该只有 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'

示例Table数据

LN_TABLE1

LN_REF

LN_TABLE2

结果

您已将 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 1Order Number 2 的组合使用 DISTINCT。因此,数据中出现的两者的每个组合只会出现一次。

因为 LN_TABLE1 有四个不同的订单号用于 LNPID 的相同值,您将生成 3 条记录,其中 Order Number 1Order Number 2 集到 210414。但是 distinct 会将它减少到只有一个,加上它们匹配的那个(在您的示例中记录 4 和 5)。

您可能必须加入 LIC.ORDER_NUM = LN_STLIC.ORDER_NUMBER 才能将订单号相互匹配,并且只能获得订单号 210414.

的 1 条记录

如果我对您想要实现的目标了解得更多一些,我可以给您一个更好的查询。

你的问题令人困惑:

我们可以用 LN_STLIC 和 LIC 做一个简单的 LEFT JOIN :

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 
;