1 つのテーブルの選択クエリに少し苦労していますが、2 つの同じ列を結合しています。問題を単純化するために、状況を再構築しました。次のようなテーブルを取得しました。
declare @DummyTable Table
(
Id int,
MainName varchar(20),
SubName varchar(20),
sequenceNumber int
)
このテーブルには、次のデータが含まれています。
insert into @DummyTable
values ( 0, 'MainName1', 'SubName1', 1),
( 1, 'MainName1', 'SubName2', 2),
( 2, 'MainName1', 'SubName3', 3),
( 3, 'MainName1', 'SubName6', 4),
( 4, 'MainName1', 'SubName7', 5),
( 5, 'MainName2', 'SubName1', 1),
( 6, 'MainName2', 'SubName2', 2),
( 7, 'MainName2', 'SubName3', 3),
( 8, 'MainName2', 'SubName4', 4),
( 9, 'MainName2', 'SubName5', 5),
(10, 'MainName2', 'SubName6', 6),
(11, 'MainName2', 'SubName7', 7),
(12, 'MainName3', 'SubName1', 1),
(13, 'MainName3', 'SubName2', 2),
(14, 'MainName3', 'SubName3', 3)
ここで、テキスト MainName1 を含むすべてのレコードを取得しようとします。同じ行に、次のように SubName 列で一致するレコード MainName2 も必要です。
Id | MainName | SubName | s | Id | MainName | SubName | s -- s = SequenceNumber
--------------------------------------------------------------
5 | MainName2 | SubName1 | 1 | 0 | MainName1 | SubName1 | 1
6 | MainName2 | SubName2 | 2 | 1 | MainName1 | SubName2 | 2
7 | MainName2 | SubName3 | 3 | 2 | MainName1 | SubName3 | 3
8 | MainName2 | SubName4 | 4 | NULL | NULL | NULL | NULL
9 | MainName2 | SubName5 | 5 | NULL | NULL | NULL | NULL
10 | MainName2 | SubName6 | 6 | 3 | MainName1 | SubName6 | 4
11 | MainName2 | SubName7 | 7 | 4 | MainName1 | SubName7 | 5
次のクエリでこれを管理しようとします。
select *
from @DummyTable dt1
left join @DummyTable dt2 on dt1.SubName = dt2.SubName
where dt1.MainName like '%Name2%'
and dt2.MainName like '%Name1%'
order by dt1.MainName, dt1.sequenceNumber
しかし、このクエリを実行すると、必要な結果が得られますが、ID 8 と 9 のレコードが欠落しています。右結合、または結合のみ (左または右なし) を試みましたが、すべて同じ結果になり、ID 8 と 9 のレコードは表示されません。ここで何が間違っているのかわかりません。欠落しているレコードが表示されません。私の問題とそれを修正する方法を理解するのを手伝ってくれる人はいますか?