使用第二个中的随机行连接MySQL中的两个表

时间:2011-06-06 11:06:43

标签: mysql join random

我有两张桌子

第一个只有5行

第二个有800行

我正在使用此查询:

SELECT * 
FROM table1 t1 
JOIN (SELECT * FROM table2 ORDER BY RAND() LIMIT 5) t2 

但是对于第二个表的每个结果,我从第一个表中得到5行。

加入时我不需要条件,我只想从第二个表中随机抽取5个结果来加入第一个结果。

示例:

--------------------------------------------------------
|table1 (always with same order)| table2(random order) |
--------------------------------------------------------
    item1                       |       item4
    item2                       |       item2 
    item3                       |       item5 
    item4                       |       item1
    item5                       |       item3

1 个答案:

答案 0 :(得分:2)

您的意思是UNION吗?

SELECT * FROM table1
UNION SELECT * FROM table2 ORDER BY RAND() LIMIT 5;

更新:修改问题后修改后的答案:

SELECT field1 FROM table1
UNION SELECT field2 FROM table2 ORDER BY RAND() LIMIT 5;

根据我的理解,你只需要每个表中的一个字段。如果你需要几个,你可以列出它们:field2,field2,...只要两个SELECT中的字段数相同。


更新2 :好的,我想我现在明白你的意思了。这是一种(脏)方式,我相信有人可以提供更优雅的解决方案:

SET @num1=0, @num2=0;

SELECT t1.field1, t2.field2
FROM (
    SELECT field1, @num1:=@num1+1 AS num
    FROM table1
) AS t1
INNER JOIN (
    SELECT field2, @num2:=@num2+1 AS num
    FROM (
        SELECT field2
        FROM table2
        ORDER BY RAND()
        LIMIT 5
    ) AS t
) AS t2
ON t1.num = t2.num;