以下のようなテーブルがあります(SQL Server 2008 R2 Enterpriseを使用):
create table Message
(
ID int Not Null Primary Key,
Text nvarchar(100) not null,
Code nvarchar(50) null
)
Insert Into Message Values (1,'Hello Everybody','T6/45')
Insert Into Message Values (2,'Hello Everybody',Null)
Insert Into Message Values (3,'Hello Everybody','T6/45')
Insert Into Message Values (4,'Hello Everybody','T6/45')
Insert Into Message Values (5,'Hello Everybody','T6/70')
Insert Into Message Values (6,'Hello Everybody','T6/70')
Insert Into Message Values (7,'Hello','T6/70')
Insert Into Message Values (8,'Hello','T6/45')
Insert Into Message Values (9,'Hello Everybody',Null)
Insert Into Message Values (10,'Hello Everybody','T6/70')
Insert Into Message Values (11,'Hello',Null)
Text
同じであるが異なるすべてのレコードを取得する必要がありますCode
。そして、Code
なりませんNull
。
したがって、期待される出力は次のようになります。
Insert Into Message Values (1,'Hello Everybody','T6/45')
Insert Into Message Values (5,'Hello Everybody','T6/70')
Insert Into Message Values (7,'Hello','T6/70')
Insert Into Message Values (8,'Hello','T6/45')
以下のクエリを試しましたが、いくつかの行が返されます。
select m1.*
from Message M1
With (nolock)
JOIN Message M2
With (Nolock)
On m1.Text=m2.Text
where (m1.ID<>m2.ID
and m1.Code<>m2.Code
and m1.Code is not null)
どうすれば期待どおりの結果を得ることができますか?
また、これはサンプルDBです。約5000万レコードのテーブルでクエリを実行する必要があります。したがって、最適化されたクエリは非常に役立ちます。