当前位置: 首页 > 面试题库 >

具有IN和NOT IN条件的单个表上的内部查询

漆雕洋
2023-03-14
问题内容

这是对我之前回答的问题的修改

我在下表中有数据:

ROLE_ID | USER_ID
------------------
 14     | USER A
 15     | USER A
 11     | USER B
 13     | USER D
 13     | USER A
 15     | USER B
 15     | USER D
 12     | USER C
 15     | USER C

我想获取仅包含13和15的用户ID。因此,根据上面的示例,我只能返回 USER D

下面的查询是在我之前的答案中提供的,而该NOT IN部分是我添加的,但是并没有达到目标。

select user_id
  from my_table
 where role_id in (13,15) AND role_id not in (11,14)
 group by user_id.
having count(distinct role_id) = 2

问题答案:

假设的组合user_idrole_id是独一无二的,你可以这样做

select user_id
  from my_table
 where role_id in (13,15,11,14) 
 group by user_id.
having sum( case when role_id in (13,15) then 1 else 0 end) = 2
   and sum( case when role_id in (11,14) then 1 else 0 end) = 0

如果user_idand的组合role_id不是唯一的,那么distinct原始的incount是必要的,事情会变得更具挑战性。



 类似资料:
  • 我正在尝试使用分区键和排序键查询Dynamodb表。排序键是unix日期,因此我想在排序中请求这2个日期之间的x分区键。我目前可以通过表扫描来实现这一点,但为了提高速度,我必须将其移至查询。我在网上找不到人们使用分区键和排序键查询他们的表的任何像样的例子。 我仔细阅读了这篇文章https://docs.aws.amazon.com/sdk-for-go/api/service/dynamodb/#

  • 我有两张桌子如下 表1是父表,表2是子表。 如何在Oracle11g中创建连接来实现这一点。我使用sql navigator+

  • 我正在尝试从技能作业表中删除一行 以下是我的疑问 但它抛出以下错误; 致命错误:未捕获的异常'异常'消息'您有一个错误在您的SQL语法;检查手册,对应于您的MySQL服务器版本的正确的语法使用附近'skj内连接作业j上<--plhd--0/<--#############################################################################

  • 问题内容: 所以我有四个桌子。每个表都有一个与前一个表ID相同的ID。因此,我的点击表中有一个ID和一个广告来源的ID。在广告表中,它有一个广告ID和一个来自其广告系列的ID。所以这是一个例子。 因此,要找出表4中的值从何而来,我需要遍历每个表并检查它们具有哪个ID。基本上,我想知道表1中的哪些值与表4中的值相关联。 表4中的内容是网站的访问者,表1中的内容是互联网广告。我想知道哪些访客来自哪些广

  • 问题内容: 我希望能够基于表达式的结果内部联接两个表。 到目前为止,我一直在尝试: RegT是我在此联接之前进行的联接: 该SQL脚本不起作用。 因此,总的来说,如果a为1,则它应在表上联接,否则应在上联接。 解决方案: 在我的选择语句中,我执行了以下联接: 然后,根据进行编辑,以输出正确的内容,如下所示: 问题答案: 尝试使用LEFT JOIN的将两个表放入查询中 现在,在您的select子句中

  • 问题内容: 我有2张桌子: 表: 表: 现在,我想获取所有位置并过滤两个属性: 我正在尝试构造一些查询,如下所示: …但是仍然无法得到我所需要的。 问题答案: 经过几个小时的合并和尝试,我终于做到了: 我太接近了,因此将所有过滤条件都移至。