gpt4 book ai didi

mysql - 如何在 MySQL 中随机连接表?

转载 作者:行者123 更新时间:2023-11-29 00:04:28 25 4
gpt4 key购买 nike

我有两个表(TableATableB)
TableA 有 10 行,TableB 有 50 行。
我希望 TableA 中的每一行与 TableB 中的 X 行随机连接。

例如,如果 TableA 有行 (a,b,c)TableB 有行 (p,q,r ,s,t,u)X=2 ,则预期结果为:

a-p
a-u
b-r
b-t
c-s
c-q

这种加入应该是随机的。

最佳答案

您可以使用 RAND() :

select x,y from 
(
select t.*, @rownum := @rownum + 1 AS rank from
(
select tablea.x, tableb.y, rand() r
from tablea cross join tableb
order by x, r
) t, (SELECT @rownum := -1) r
) tr
where tr.rank%(select count(y) from tableB)<2

在上面的查询中,我将 tableA 中的每个元素与 tableB 中的每个元素连接起来。对于每个这样的行,计算 RAND() 值。然后这样的表根据这个排名对 tableA 中的每个值进行排序。然后我只需要为每个值选择第一个 X 行。

此查询中的数字 2 是您的 X

你可以在SQL Fiddle中看到它

编辑:

我找到了一个不重复 tableB 元素的解决方案:

select ta.x, tb.y from 
(
select y, @rownumB := @rownumB + 1 as rnB
from
(select y, rand() as r from tableB order by r) t, (SELECT @rownumB := -1) rownB
) tb,
(
select x, @rownumA := @rownumA + 1 as rnA
from tableA, (SELECT @rownumA := -1) rownA
) ta
where tb.rnB%5=ta.rnA
order by ta.x;

以上查询确实:

  • 随机播放tableB
  • 将行号 rnB (0..14) 分配给打乱后的 tableB
  • 将行号 rnA (0..4) 分配给 tableA
  • 的行
  • 使用 % 运算符将“tableB”与 tableA 连接
  • tableB 有 15 个元素。所以 rnB%5 将给出数字 (0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4)。这些数字与 rnA 连接。所以 tableA 的每一行都与 tableB 的 3 行

请参阅 SQLFiddle

关于mysql - 如何在 MySQL 中随机连接表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28186444/

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