這是我的查詢。從本質上講,我想用LEFT JOIN
檢索值@Remote.ImportantVal
:左連接和通配符不返回結果?
declare @Local table
(
LocalId varchar(15),
Match1 int,
Match2 varchar(5)
)
insert into @local select '12_012_112', 5, 'MATH'
insert into @local select '12_012_113', 5, 'MATH'
insert into @local select '12_012_114', 5, 'MATH'
declare @Remote table
(
RemoteId varchar(15),
ImportantVal varchar(20),
Match1 int,
Match2 varchar(5)
)
insert into @Remote select 'ABC0012_012_112', 'Important', 5, 'MATH'
insert into @Remote select 'ABC0112_012_113', 'Important', 5, 'MATH'
insert into @Remote select 'ABC0012_012_114', 'Important', 5, 'MATH'
select l.localId, r.RemoteId, r.ImportantVal
from @Local l left join @Remote r on 'ABC%' + l.LocalId like r.RemoteId
and l.Match1 = r.Match1
and r.Match2 = r.Match2
看來問題是%
,但它是必要的,因爲後ABC的2個字符將永遠是相同的。在上一個查詢中,兩個表不匹配,並返回3個空行。
如果我用這樣的事情,那麼只有2點相匹配的行,因爲它基本上是一個inner join
:
select l.localId, r.RemoteId, r.ImportantVal
from @Local l left join @Remote r on 'ABC00' + l.LocalId like r.RemoteId
and l.Match1 = r.Match1
and r.Match2 = r.Match2
我也與where
條款試過left join
,但只是把它轉換成一個inner join
所以什麼也沒有返回:
select l.localId, r.RemoteId, r.ImportantVal
from @Local l left join @Remote r on 'ABC%' + l.LocalId like r.RemoteId
where l.Match1 = r.Match1
and r.Match2 = r.Match2
使用left join
和%
,我怎麼能在兩個表中的所有三排匹配嗎?
謝謝。
謝謝。令人驚訝的是,改變訂單的工作。 – rbhat
這是一種錯誤嗎?僅僅因爲參數的順序,結果集會發生變化是沒有意義的。 – rbhat
@rbhatup據我所知,它是由設計,當然不是一個錯誤。這只是運營商的定義。 – jpw