以下是有条件的问题:
在与上述情况有关的情况下,管理层想要知道哪些技术人员在一次交易中获得认证而在另一次交易中没有。选择您选择的任何两个交易,并显示技术员姓氏,名字和职位。
以下是我的表格:
TECHNICIAN TABLE:
technician_nbr,last_name,first_name,title,address,phone,salary,shift,manager_nbr '4701','Doug','Maxim','Jr Tech','6 street','6042233645','78900.00','NOR','901'
'4702', 'McKennan','Brydon','Sr Tech','7 street','6043349556','89000.00', 'EAR','901'
'4703','周','娘娘腔','Tr Tech','8街', '6044455967','70100.00','NOR','901'
'4704','好','Magdeline', 'Sr Tech','9 street','6045567778','82300.00','EAR','901'
'4705','Bitty','Nicholas','T Tech','5 street','6046677289', '42300.00','LAT','901'
SPECIALIZES TABLE:
technician_nbr,trade_type,date_certified
'4701','AirFrame','2010-03-16'
'4701','航空电子','2011-06-16'
'4701','引擎', '2010-07-16'
'4702','机身','2010-01-18'
'4702','液压', '2011-09-16'
'4702','内部','2010-02-02'
'4703','航空电子', '2010-08-08'
'4703','发动机','2011-10-12'
'4703','液压', '2011-09-19'
这是我的问题:
SELECT DISTINCT last_name, first_name, title, shift
FROM technician, specializes
WHERE trade_type='Hydraulics' OR trade_type = 'AirFrame'
GROUP BY first_name
HAVING shift='NOR'
这是我查询的结果:
last_name,first_name,title,shift
''道格','马克西姆','Jr Tech','NOR' '周','娘娘腔','Tr Tech','NOR'
现在,我想告诉你我的困惑。虽然,我乐观地认为我的查询结果是正确的,因为在阅读了上面的问题说明后,我查看了表格中选择了两种类型的交易,我发现这两个人只在一次交易中获得认证。
我不知何故想使用查询显示它们,所以我试图通过“NOR”Shift在HAVING CLAUSE中对它们进行分组。结果是成功的,但问题是我所做的并没有调用查询,因为我故意在HAVING CLAUSE中将Shift设置为“NOR”,这样它肯定会显示这些只是因为它们只有“NOR”移位。
我想要一个可以显示这两个人的查询,比如我或你从未在表格中查看过这些人,查询会产生这些结果。非常感谢您的努力。
答案 0 :(得分:0)
如果我理解你的问题,你应该使用这个查询
SELECT last_name, first_name, title, shift
FROM technician
WHERE technician_nbr in (select technician_nbr
from specializes
where trade_type in ('Hydraulics' , 'AirFrame' )) /* list of trade_type need */
AND technician_nbr not in (select technician_nbr
from specializes
where trade_type in ('Engine' )); /* list of not trade_type need */