我有一个似乎无法修复的Join问题,这是代码的简化版本
SELECT top 5
a.Name00,
b.MIDNumber
FROM
[CM_UOC].[dbo].[Computer_System_DATA] AS a
LEFT OUTER JOIN
[UoC_Inventory].[dbo].[Inv_DATA] AS b on b.MIDNumber like '%'+a.Name00+'%'
基本上ID是相同的,但是a.Name00中的某些ID带有前导或尾随字符,例如“ AVMID ..”。找到并结合了基于这些条目的所有匹配项,但返回了从表'b'中选择的任何列为NULL。如果没有前导或尾随字符,则联接很好。
我得到的是
Name00 MIDNumber
AVMID014253 NULL
AVMID10059 NULL
AVMID10061 NULL
AVMID10063 NULL
AVMID10064 NULL
我需要的是
Name00 MIDNumber
AVMID014253 MID14253
AVMID10059 MID10059
AVMID10061 MID10061
AVMID10063 MID10063
AVMID10064 MID10064
我知道,如果没有匹配项,则LEFT JOIN将返回空值,但是我如何才能加入并获取所需的输出?
编辑
以此固定了主角
WITH A AS
(
SELECT 'M'+right(Name00, len(Name00) - charindex('M', Name00)) as 'A_MID'
FROM [CM_UOC].[dbo].[Computer_System_DATA]
),
B AS
(
SELECT MIDNumber AS 'B_MID'
FROM [UoC_Inventory].[dbo].[Inv_DATA]
)
SELECT * FROM A LEFT JOIN B ON (B.B_MID = A.A_MID)
WHERE B.B_MID IS NOT NULL
ORDER BY A_MID DESC
在修剪任何前导字符时仍然遇到问题
答案 0 :(得分:2)
在这种情况下,您可以使用 CHARINDEX 函数:
SELECT top 5 a.Name00,
b.MIDNumber
FROM [CM_UOC].[dbo].[Computer_System_DATA] AS a
LEFT OUTER JOIN [UoC_Inventory].[dbo].[Inv_DATA] AS b
on CHARINDEX(b.MIDNumber,a.Name00) > 0