我有以下表格:
员工(empid,姓名,年龄)
预订(bookingid,empid,cid)
汽车(cid,名称,类型)。
内容是这样的:
员工:
预订:
汽车:
这是我的问题:什么是返回所有预订了不是红色汽车的员工姓名的查询?
已编辑:
第一次我的问题应该更加具体
这个链接
How can I join two tables but only return rows that don't match?
它是关于比较来自不同表的相同字段。帖子清楚地表明用户需要比较两个表中的行并返回不匹配的表。
但这不是我的情况。正如我的标题所示,我想知道是否可以比较执行查询返回的行。
我想得到没有预订至少一辆红色汽车的员工的姓名。
考虑表中的值,
员工1和5已经预订了所有车辆
员工3只预订了一辆红色轿车和
员工4预订了一辆红色轿车和一辆绿色轿车
员工2已预订绿色汽车
现在,只返回员工2名称的查询是我的问题。(我知道我可以通过在where子句中指定type ='Green'来实现,但是当有两个以上时它会失败色。)
答案 0 :(得分:1)
select DISTINCT e.Name from #Employee e
inner join #Booking b on e.EmpID = b.EmpID
where e.EmpID not in (
select b.EmpID from #Booking b
inner join #Cars c on b.CID = c.CID
where [type] = 'red'
)