比较查询返回的行 [重复]

Posted

技术标签:

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

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

员工:

    emp1,A,32 emp2 , B , 36 emp3,C,25 emp4 , D , 40 emp5 , E , 45

预订:

    1 , emp1, car1 2,emp1,car3 3 , emp1 , car2 4,emp2,car2 5,emp3,car3 6, emp4, car1 7,emp4,car2 8,emp5,car3 9, emp5, car2 10 , emp5 , car1

汽车:

    car1,一,红 car2,二,蓝色 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 谢谢你的建议。但是我尝试了很多查询,但我最终得到了相同的结果,但仍然没有给我所有没有预订红色汽车的人的名字。我想知道这到底是怎么可能的。如果有任何与我所问的类似的东西,我很乐意去看看:) 【参考方案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 .. 谢谢你的回答 :))

以上是关于比较查询返回的行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

返回受 SQL UPDATE 语句影响的行 [重复]

返回两个行号之间的行(范围之间)[重复]

左连接返回重复的行

postgresql函数-获取受更新查询影响的行数[重复]

Bigquery 返回重复的行以及错误的计数

插入并返回插入的行数(非重复)和记录 ID(新的或重复的)