gpt4 book ai didi

mysql - 如何使用 ORDER BY RAND() 将同一张表与自身连接起来?

转载 作者:行者123 更新时间:2023-11-29 04:32:15 24 4
gpt4 key购买 nike

我想获得一个表的 id 与其自身的随机组合。

SELECT id FROM t1
SELECT id as id2 FROM t1 ORDER BY RAND()
SELECT id as id3 FROM t1 ORDER BY RAND()

我如何JOIN这些查询来获取

SELECT id,id2,id3

1 random_id random_id
2 random_id random_id
3 random_id random_id
4 random_id random_id
5 random_id random_id

换句话说,JOIN 将这三个 SELECT 并排放置的意义何在。

创建一个唯一的组合是有益的,但是使用上面的查询ORDER BY RAND()可以重复相同的idid2id3。前者是理想的,但后者对我来说已经足够了。

最佳答案

如果您使用的是 MySQL 8+,则 ROW_NUMBER 可能适用于此:

WITH cte AS (
SELECT id,
ROW_NUMBER() OVER (ORDER BY id) rn1,
ROW_NUMBER() OVER (ORDER BY RAND(UNIX_TIMESTAMP())) rn2,
ROW_NUMBER() OVER (ORDER BY RAND(UNIX_TIMESTAMP()+1)) rn3
FROM t1
)

SELECT
t1.id,
t2.id AS id2,
t3.id AS id3
FROM cte t1
INNER JOIN cte t2
ON t1.rn1 = t2.rn2
INNER JOIN cte t3
ON t1.rn1 = t3.rn3;

下面的演示来自一个示例表,其中包含从 1 到 10 的 id 值。

screen capture from demo

Demo

关于mysql - 如何使用 ORDER BY RAND() 将同一张表与自身连接起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58527539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com