Sql server 2005 TSQL在另一个表中搜索行
给出了两个表 PilotGroup表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
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