首页 > 解决方案 > MYSQL 为每一行从另一个表连接随机行

问题描述

我有两张桌子:食物和配料(请参阅下面的图 1)。

图 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

图 2 在此处输入图像描述

标签: mysqljoinrandomgreatest-n-per-groupwindow-functions

解决方案


这也适用于旧版本的 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

推荐阅读