database - 随机选择尚未在连接表中的实体

标签 database performance optimization

这看起来很有趣。

假设三个表,usersitems 和一个连接表users_items。后者将 users.id 链接到 items.id。当 users_items 表中有一行包含对 (U.id, I.id).

现在:我将如何随机选择特定用户尚未拥有的项目?

最可行的解决方案似乎是:

  1. 收集所有项目 id
  2. 收集用户 U 拥有的项目的 id
  3. 从#1 中生成的集合中删除步骤#2 中的所有id
  4. 从结果集中选择随机元素(简单)

这是唯一明智的方法吗?它是最优的吗?让我们假设这将是一个经常使用的功能。而且每个表中的元素数量都很大。

有什么有趣的想法吗?

最佳答案

您可以使用左连接生成用户当前不拥有的项目 ID 列表:

SELECT i.id
FROM items i 
LEFT JOIN users_items ui ON ( i.id = ui.item_id AND ui.users_id = 2 )
WHERE ui.item_id IS NULL;

从这里,您可以从结果集中随机选择一个元素。

关于database - 随机选择尚未在连接表中的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10729020/

相关文章:

php - HTML 表无法识别 mysql 数据库中的换行符

c - 如何查看内存带宽是否已经成为瓶颈?

python - RSA 编码和解码 [e,d]。在 python 中查找 e 和 d.. 更新

mysql 错误 您的 SQL 语法有错误

node.js - 在 Mongoose 的模式中使用短字段名称是否可取?

sql - 如何在OrientDB中通过SQL检查类索引及其属性、类型等?

python - 如何提高这个递归函数的性能?

c - 在 C 中,为什么 "signed int"比 "unsigned int"快?

java - 初始化 HashMap 的最佳方式

c - 在汇编中实现矩阵 vector 乘法