Вам нужен способ иметь переменные в SQL (так что вы можете сказать select * from $name where $name in (select ...)
). SQL не позволяет этого.
Я предлагаю разделить процесс на:
Сначала запустите этот запрос:
select 'select distinct name from ' || table_name || ' union'
from select table_name from table_list
Это даст вам выбор для запуска. Поместите их в небольшой скрипт, удалите последний «союз» и запустите этот скрипт.
[EDIT] Если MySQL поддерживает оператор «eval» в хранимых процедурах (то есть, где вы можете построить SQL из частей, а затем запустить его), вы можете сделать это. Я проверил документы, и не похоже, что есть eval. Вы также можете написать расширение на C (см. глава 22 * 1012 *), в котором реализована функция поиска или функция eval.
Но я предполагаю, что ваша база данных не будет постоянно меняться. Таким образом, наиболее простым решением было бы написать небольшой сценарий SQL, который создает код для представления (это строка; фактически это представление не создает представление). Каждый раз, когда изменяется база данных, вы просто запускаете сценарий, чтобы воссоздать представление, а затем можете выполнить запрос к представлению, чтобы получить список всех имен.