Mysql从表中查询随机唯一值

标签 mysql

我有 3 个表:

A (id, b_id)
B (id, city)
C (message)

我需要构建一个查询:

SELECT b.city, random(unique(c.message)) from A a, B b, C c where a.b_id = b.id;

当然我这里的查询是我需要的例子。

我需要 A 和 B 连接的每一行都有一条来自 C 的随机消息。我们确信有足够的消息可以在 A 和 B 的连接结果中进行唯一随机化。

最佳答案

这可能不是最有效的方法,但它会映射一个唯一的 C.message(A, B)假设 count(C) >= count(A, B) .

SET @i:=0;
SET @J:=0;

SELECT ab_mapping.city, c_index.message
FROM (SELECT B.city, @i as ind, @i:=@i+1
      FROM A JOIN B
      ON A.b_id = B.id) as ab_mapping
JOIN
     (SELECT c_rand.message, @j as ind, @j:=@j+1
      FROM (SELECT * FROM C ORDER BY RAND()) as c_rand) as c_index
ON ab_mapping.ind = c_index.ind;

工作原理

这个子查询分配一个唯一的整数(0 <= i < count(A, B))给(A, B)映射:

SELECT B.city, @i as ind, @i:=@i+1
FROM A JOIN B
ON A.b_id = B.id;

此子查询为每个 0 <= j < count(C) 分配一个唯一的整数 ( message ) (以随机顺序)在 C 中:

SELECT c_rand.message, @j as ind, @j:=@j+1
FROM (SELECT * FROM C ORDER BY RAND()) as c_rand;

最终查询在 ind 上加入两个子查询分配一个独特的随机 message每个 (A, B) .

关于Mysql从表中查询随机唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34096682/

相关文章:

mysql - mysql中涉及交叉连接时,COUNT如何表现?

MYSQL关系模式规划

mysql - 合并mysql中的记录

mysql - 查询 WHERE 日期最近超过 14 天

php - 如何显示MYSQL数据库中的数据

mysql - Rails 关联和删除

C# Mysql 创建新行但如果不存在

mysql - 结果由多行错误组成 mysql

mysql - 根据 SQL 中的组过滤掉重复项

mysql - SQL 检索列信息(包括引用)