比较查询返回的行

时间:2016-02-29 19:21:47

标签: mysql sql subquery correlated-subquery nested-query

我有以下表格:

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

员工:

  1. emp1,A,32
  2. emp2,B,36
  3. emp3,C,25
  4. emp4,D,40
  5. emp5,E,45
  6. 预订:

    1. 1,emp1,car1
    2. 2,emp1,car3
    3. 3,emp1,car2
    4. 4,emp2,car2
    5. 5,emp3,car3
    6. 6,emp4,car1
    7. 7,emp4,car2
    8. 8,emp5,car3
    9. 9,emp5,car2
    10. 10,emp5,car1
    11. 汽车:

      1. car1,one,Red
      2. car2,two,Blue
      3. car3,three,Red
      4. 这是我的问题:什么是返回所有预订了不是红色汽车的员工姓名的查询?

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

1 个答案:

答案 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'
)