Используя переменные MySQL, вы должны быть в состоянии сделать что-то вроде ... Хотя это явно не проверено, это ДОЛЖНО дать вам то, что вы хотите. Вы не можете сделать простое декартово перекрестное объединение, потому что, как вы знаете, оно получит первое имя и объединит со всеми последними именами, а затем с последующим именем со всеми фамилиями ...
В этом запросе используются переменные MySQL. Внутренний запрос (предварительно соответствующие имена и фамилии) предварительно запросит 10 случайных имен (или фамилий). Затем присоедините это к @variable для последовательности имени (@fns) и последовательности фамилии (@lns). Так как обе будут иметь только 10 записей, и каждая из них будет начинаться со своего счетчика в 0, они ОБА приведут к записи с последовательностью от 1 до 10, и, таким образом, JOIN будет находиться в ПОСЛЕДОВАТЕЛЬНОСТИ, где будет иметь место только одна из каждого гарантированного значения. ... vs rand (), который возвращает некоторую дробь с плавающей запятой, где вам никогда не гарантируется, что число из одной таблицы будет совпадать с числом другой таблицы.
select
First10.FirstName,
Last10.LastName,
( SELECT status FROM status ORDER BY RAND( ) LIMIT 1) AS Status
from
( select fn.FirstName,
@fns := @fns + 1 as Sequence
from
( select FirsName,
from FirstNames
order by rand()
limit 10 ) fn,
(select @fns := 0 ) vars
) First10
JOIN
( select ln.LastName,
@lns := @lns + 1 as Sequence
from
( select LastName,
from LastNames
order by rand()
limit 10 ) ln,
(select @lns := 0 ) vars
) Last10
ON First10.Sequence = Last10.Sequence