Sql server 2005 TSQL在另一个表中搜索行

Sql server 2005 TSQL在另一个表中搜索行,sql-server-2005,Sql Server 2005,给出了两个表 PilotGroup表 Pilot Plane Jon Smith A1-Fighter Jon Smith B1-Fighter Gravell A2-Fighter Jon Skeet A1-Fighter Jon Skeet B1-Fighter Jon Skeet A4-Fighter Gravell A5-Fighter Plane A1-Fighter B1-Fighter south操作表 Pi

给出了两个表

PilotGroup表

Pilot            Plane  

Jon Smith      A1-Fighter
Jon Smith   B1-Fighter
Gravell     A2-Fighter
Jon Skeet   A1-Fighter
Jon Skeet   B1-Fighter
Jon Skeet   A4-Fighter
Gravell     A5-Fighter
Plane
A1-Fighter
B1-Fighter
south操作表

Pilot            Plane  

Jon Smith      A1-Fighter
Jon Smith   B1-Fighter
Gravell     A2-Fighter
Jon Skeet   A1-Fighter
Jon Skeet   B1-Fighter
Jon Skeet   A4-Fighter
Gravell     A5-Fighter
Plane
A1-Fighter
B1-Fighter
任务是打印在A1战斗机和B1战斗机上接受过训练的飞行员姓名

我通过执行命令得到了结果

select distinct pilot from PilotGroup  as pg1
   where not exists
        ( 
           select * from SouthOperation Sop where 
              not exists
              ( 
                select *from PilotGroup  as pg2 where ( pg1.pilot = pg2.pilot) 
                 and 
                (pg2.plane= Sop.plane)
               )
        )
是否有其他方法可以对照其他表搜索行

select 
    pilot 
from 
    pilotgroup pg 
    inner join
    southoperation sop on (pg.plane = sop.plane)
group by 
    pilot
having 
    count(pg.plane) = (select count(*) from southoperation)
任务是打印在A1战斗机和B1战斗机上接受过训练的飞行员姓名

如果预先有这些值,则根本不需要
south操作

SELECT Pilot FROM PilotGroup WHERE Plane = 'A1-Fighter'
INTERSECT
SELECT Pilot FROM PilotGroup WHERE Plane = 'B1-Fighter'

然而,如果你的意思是“打印在
SouthOperation
中所有飞机上接受过培训的飞行员的姓名”,那么我的问题是:在
SouthOperation
中是否只有两行?或者可能更多?

您发布的问题几乎完全符合Joe Celko的这篇文章中的例子:,事实上,它涵盖了这样一个事实,即“适当”的术语是关系划分。

关于AakashM的回答,只是澄清一下,这里的解决方案是展示在《南方行动》中列出的所有飞机上接受过培训的飞行员,不需要知道那张表中有哪些飞机。这个问题也立刻让我想起了那个例子。
declare @t table (pilot int, plane int);

insert into @t
 select * from (select 1 pilot, 1 plane union all
select 1, 2 union all
select 2, 1 union all
select 3, 3 union all
select 4, 1 union all
select 4, 2) t

select t1.pilot
from @t t1, @t t2 
where t1.pilot = t2.pilot and t1.plane = 1 and t2.plane = 2
group by t1.pilot