【问题标题】:Comparing Rows Returned by a Query [duplicate]比较查询返回的行 [重复]
【发布时间】:2016-02-29 19:21:46
【问题描述】:

我有以下表格:

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

员工:

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

预订:

  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

汽车:

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

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

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

【问题讨论】:

  • 您应该在网上提问之前尝试解决这个问题。如果你不能解决这个问题,你可以尝试让所有预订红色汽车的员工,看看这是否能给你任何想法。
  • 欢迎来到 SO。分享您的研究对每个人都有帮助。告诉我们您尝试了什么以及为什么它不能满足您的需求。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!另见How to Ask。记住 SO 不是免费的代码服务
  • @GordonLinoff 谢谢你的建议。但是我尝试了很多查询,但我最终得到了相同的结果,但仍然没有给我所有没有预订红色汽车的人的名字。我想知道这到底是怎么可能的。如果有任何与我所问的类似的东西,我很乐意去看看:)

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


【解决方案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'
)

【讨论】:

  • 但这给了我所有预订红车以外的汽车的员工姓名,即如果员工 1 预订了一辆红车和一辆绿车,它仍然会返回我员工的姓名1 因为他预订了一辆绿色汽车。如果员工至少预订了一辆红色汽车,我正在寻找一个忽略该员工的查询。
  • 感谢您耐心地编辑您的答案。但是,如果有员工根本没有订车怎么办。上面的查询也返回了他们的名字。
  • 终于 :D .. 谢谢你的回答 :))
猜你喜欢
  • 2016-02-13
  • 2023-03-28
  • 1970-01-01
  • 2010-11-27
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
相关资源
最近更新 更多