-1

我有以下表格:

员工(empid,姓名,年龄)
预订(bookingid,empid,cid)
汽车(cid,姓名,类型)。
内容是这样的:

员工 :

  1. 雇员 1 , 一个 , 32
  2. 雇员 2 , 乙 , 36
  3. emp3 , C , 25
  4. emp4 , D , 40
  5. emp5 , E , 45

预订:

  1. 1,emp1,汽车1
  2. 2、雇员1、汽车3
  3. 3、雇员1、汽车2
  4. 4、emp2、汽车2
  5. 5、emp3、car3
  6. 6、emp4、汽车1
  7. 7、emp4、car2
  8. 8、emp5、car3
  9. 9、emp5、汽车2
  10. 10,emp5,汽车1

汽车:

  1. car1,一,红色
  2. car2,二,蓝色
  3. car3,三,红色

这是我的问题:返回所有预订了非红色汽车的员工姓名的查询是什么?

编辑
我第一次应该更具体地说明我的问题。
此链接 如何加入两个表但只返回不匹配的行?
它是关于比较来自不同表的相同字段。帖子清楚地表明用户需要比较两个表中的行并返回不匹配的行。
但这不是我的情况。正如我的标题所示,我想知道是否可以比较执行查询返回的行。
我想获得至少没有预订一辆红色汽车的员工的姓名。考虑到表中的值,
员工 1 和 5 已经预订了所有汽车。
员工 3 只预订了一辆红色汽车,而
员工 4 预订了一辆红色汽车和一辆绿色汽车。
员工 2 预订了一辆绿色汽车。
现在,只返回员工 2 的姓名的查询是我的问题。(我知道我可以通过在 where 子句中指定 type='Green' 来做到这一点,但是当有两个以上时会失败颜色。)

4

1 回答 1

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'
)
于 2016-02-29T19:42:09.247 回答