我有两张桌子
第一个只有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
答案 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;