Мне нужно сделать поиск по нескольким таблицам базы данных. Поскольку все таблицы имеют одинаковую структуру (одинаковые столбцы, они на самом деле являются архивированными данными для одной и той же таблицы), я могу использовать UNION ALL, чтобы объединить их все.
Однако проблема заключается в том, что мне нужно получить отдельное значение для столбца имени пользователя, а для каждого значения имени пользователя мне нужно найти самую раннюю метку времени после использования UNION ALL для всех архивных данных.
Я просмотрел документацию и некоторое время гуглил и не смог найти удовлетворительного решения с MySQL.
Единственный способ, которым я могу придумать, - написать некоторый внешний код для поиска значений с помощью UNION ALL для каждого имени пользователя. И запустите запрос 1 к 1. Зная, что в базе данных указано 100k различных имен пользователей, это займет довольно много времени. Я уже запустил этот скрипт, однако он кажется действительно неэффективным и тратит ресурсы.
SELECT * FROM table1 WHERE `USERNAME` LIKE 'USERNAMEXXX'
UNION ALL
SELECT * FROM table2 WHERE `USERNAME` LIKE 'USERNAMEXXX'
UNION ALL
SELECT * FROM table3 WHERE `USERNAME` LIKE 'USERNAMEXXX'
UNION ALL
SELECT * FROM table4 WHERE `USERNAME` LIKE 'USERNAMEXXX'
ORDER BY TIME_STAMP ASC
LIMIT 1
Выше SQL-запрос дает мне то, что я хочу для каждого имени пользователя, но мне нужно повторить его для каждого отдельного имени пользователя.
Чтобы добавить, у меня есть еще одна таблица, в которой хранятся все различные значения имени пользователя. Я использую эту таблицу для заполнения поиска в моем решении для внешнего кода.
Есть ли способ добиться этого с помощью собственного SQL, без использования внешних сценариев? Нечто, объединяющее различное, объединяющее все и упорядоченное по временной отметке asc limit 1.