DECLARE @table TABLE( mnbr int,
Pid int,
Pname varchar(10),
Jid int,
Jname varchar(10))
INSERT INTO @table
VALUES(150 , 1 , 'Mark' , 8 ,'Jerry')
,(250 , 1 , 'Mark' , 8 , 'Jerry')
,(350 , 2 , 'Jim' , 9 , 'Luke')
,(450 , 2 , 'Jim' , 9 , 'Luke')
,(550 , 2 , 'Jim' , 10 , 'Jude')
,(650 , 3 , 'Andy' , 11 , 'Matt')
,(750 , 4 , 'Brian' , 21 , 'Chris')
,(850 , 4 , 'Brian' , 7 , 'Mac')
,(950 , 5 , 'Jean ' , 21 , 'Chris')
对于以上数据.....我的输出应该如下图:
350 2 Jim 9 Luke
450 2 Jim 9 Luke
550 2 Jim 10 Jude
750 4 Brian 21 Chris
850 4 Brian 7 Mac
在 mnbr 150 和 250.... 的情况下,主要所有者标记有两个联名账户,并且在这两个联名账户上,联合所有者是 jerry。因此不应显示 Mark 的帐户。
在 mnbr 的情况下:350、450、550
Jim 有 3 个联名账户,并且这三个联名账户并非都属于同一个联名所有者。所以必须显示所有 3 个帐户。
Mnbr 650 只有一个联名账户和一个联名所有者。所以不应该显示。
我编写了以下查询,该查询返回我需要的数据。
SELECT * FROM @table WHERE pname IN (
SELECT pname FROM @table
WHERE pname IN (SELECT pname FROM @table GROUP BY pname,jname HAVING COUNT(*)!>1)
GROUP BY pname HAVING COUNT(*)>1
)
我想知道,我的查询会提供良好的性能吗?