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
)
我想知道,我的查询会提供良好的性能吗?