Соедините две таблицы в MySQL со случайными строками из второй - PullRequest
3 голосов
/ 06 июня 2011

У меня есть две таблицы

Первая с 5 строками

Вторая с 800 строками

Я использую этот запрос:

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

Но я получаю 5 строк из первой таблицы для каждого результата второй таблицы.

Мне не нужно условие для объединения, я просто хочу, чтобы 5 случайных результатов из второй таблицы присоединились к5 результатов из первого.

Пример:

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

1 Ответ

2 голосов
/ 06 июня 2011

Вы имеете в виду 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...