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 1
和 Order Number 2
的组合使用 DISTINCT。因此,数据中出现的两者的每个组合只会出现一次。
因为 LN_TABLE1
有四个不同的订单号用于 LNPID
的相同值,您将生成 3 条记录,其中 Order Number 1
和 Order 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
;
我有两个 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 1
和 Order Number 2
的组合使用 DISTINCT。因此,数据中出现的两者的每个组合只会出现一次。
因为 LN_TABLE1
有四个不同的订单号用于 LNPID
的相同值,您将生成 3 条记录,其中 Order Number 1
和 Order Number 2
集到 210414。但是 distinct
会将它减少到只有一个,加上它们匹配的那个(在您的示例中记录 4 和 5)。
您可能必须加入 LIC.ORDER_NUM = LN_STLIC.ORDER_NUMBER
才能将订单号相互匹配,并且只能获得订单号 210414
.
如果我对您想要实现的目标了解得更多一些,我可以给您一个更好的查询。
你的问题令人困惑:
我们可以用 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
;