mysql - MYSQL 为每一行从另一个表连接随机行
问题描述
我有两张桌子:食物和配料(请参阅下面的图 1)。
我希望将每种食物的成分随机化(可以是所有食物的重复成分)。如何使用查询来检索价格呢?谢谢
我尝试使用下面的 SQL,但不是我想要的结果(请参阅图 2),因为如果使用sample SQL 1
保证所有行相同的成分。如果使用sample SQL 2
价格也是随机的,与各自的成分不匹配。
/* sample SQL 1 */
select a.description, b.description, b.price
from Foods a
join (select a1.* from Ingredients a1 order by rand() limit 1) b
;
/* sample SQL 2 */
select a.description, (select a1.description from Ingredients a1 order by rand() limit 1) as description, (select a1.price from Ingredients a1 order by rand() limit 1) as price
from Foods a
解决方案
这也适用于旧版本的 MySQL 数据库。
SELECT food, indeg, MAX(rn)
FROM (
SELECT x.*, @rn := @rn + 1 AS rn
FROM ( SELECT f.description AS food, i.description AS indeg
FROM Foods f
JOIN Ingredients i
ORDER BY RAND()
) x
JOIN (SELECT @rn := 0) r
) a
GROUP BY food
推荐阅读
- java - Android BuildConfig 类值为空
- angular - 如何在 Angular 9 项目中使用 amplify-authenticator 修复生产构建?
- java - 建议如何编写在 SFTP 位置可用的文本文件
- javascript - 什么是支持不同变体的 javascript 库的好策略
- javascript - 节点 JS 异步执行
- c - C语言内联函数的语法错误
- python-3.x - python3 EOFError:读取一行时出现EOF
- asp.net - 为什么控制器在使用HttpPost请求时收不到参数?
- c - 如何始终分配大小为 32 倍数的静态数组
- json - .NET NewtonSoft JSON 使用不同的属性名称反序列化