MySQL:查询行的子集

标签 mysql subset

给出下表:

表:USER_ASSETS

USER_ID | ASSET_ID
-------------------
1       |  1
-------------------
1       |  2
-------------------
1       |  3
-------------------
2       |  2
-------------------
2       |  3
-------------------

如果我搜索 ASSET_ID 等于 1 和 2 的 USER_ID,它应该返回 USER_ID 1 作为 USER_ID 1 有 ASSET_ID 的 1 和 2。

如果我传递 ASSET_ID = 1 and 2 and 4,它应该返回 0 行,因为没有 USER_ID 具有 ASSET_ID 1、2 和 4。

如果我传递 ASSET_ID 2 和 3,它应该返回 USER_ID 1 和 2,因为这两个 USER_ID 都有 ASSET_ID 2 和 3。

我现在被卡住了,因为我找不到我想要的结果的正确查询。

我试过这个:

SELECT DISTINCT ID FROM USER_ASSETS WHERE ASSET_ID IN (1, 2);

但结果是错误的,因为它同时返回了 USER_ID 1 和 2。

我也试过:

SELECT DISTINCT ID FROM USER_ASSETS WHERE ASSET_ID = 1 AND ASSET_ID = 2

但这总是返回 0 行,因为 WHERE 子句一次只对一行执行。

最佳答案

你可以尝试这样的事情:

select user_id
  from user_assets
  where asset_id = 1 or asset_id = 2 ...
  group by user_id
  having count(distinct asset_id) = (number of assets you are looking for)

demo here显示您需要的输出。

如果 (user_id, asset_id) 是一个唯一键,那么 distinct 就不是必需的

关于MySQL:查询行的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30430579/

相关文章:

matlab - 返回表中每个子组的最大值

mysql - 未找到 Ejabberd MySQL bean 文件

r - 具有 2 个条件的子集不适用于哪个功能

mysql - 从大 dB 中删除重复行

sql - 如何从 MySQL 数据库中选择随机记录?

r - 在 R 中使用 data.table,当标准字段为整数时,一个子集或查询如何?

postgresql - 根据时间和日期在 PostgreSQL 中的时态数据库中创建子集

r - 用于选择一个或多个变量范围内的观测值的函数 (dplyr)

php - 如何保证从 SELECT 查询中获取 1000 行? MySQL

java - 触发器位于 MVC 中的什么位置?