В MySQL 8.0 вы можете самостоятельно объединить таблицу в CTE, чтобы найти случайную пару записей, которые удовлетворяют условию, а затем использовать UNION ALL
, чтобы отменить результаты:
WITH cte AS (
SELECT
t1.line_name line_name1,
t1.device_name device_name1,
t1.count count1,
t2.line_name line_name2,
t2.device_name device_name2,
t2.count count2
FROM stat t1
INNER JOIN stat t2 ON LEFT(t1.line_name, 1) != LEFT(t2.line_name, 1)
ORDER BY RAND()
LIMIT 1
)
SELECT line_name1, device_name1, count1 FROM cte
UNION ALL
SELECT line_name2, device_name2, count2 FROM cte
Демонстрация на скрипте БД :
Прогон № 1:
| line_name1 | device_name1 | count1 |
| ---------- | ------------ | ------ |
| 3001 | 3548007 | 3 |
| 2001 | 3548004 | 7 |
Прогон № 2:
| line_name1 | device_name1 | count1 |
| ---------- | ------------ | ------ |
| 1003 | 3548003 | 6 |
| 2002 | 3548005 | 3 |