Выбрать все строки из всех таблиц, где имя столбца равно заданному значению - PullRequest
1 голос
/ 31 августа 2011

Есть ли способ выбрать все строки во всех таблицах, где имя столбца соответствует определенному условию?Я знаю, как выбрать все таблицы, которые содержат заданное имя столбца:

SELECT TABLE_NAME FROM information_schema.COLUMNS WHERE COLUMN_NAME = 'customer_id'

Есть ли способ объединить таблицы, используя извлеченное имя таблицы?Например, что-то, что работает как этот (явно неправильный) запрос, пытается.

SELECT * FROM (SELECT DISTINCT TABLE_NAME FROM information_schema.COLUMNS WHERE COLUMN_NAME = 'customer_id') WHERE customer_id = 1

1 Ответ

2 голосов
/ 31 августа 2011

Не в простом SQL.Вы не можете использовать результаты одного запроса в качестве имени таблицы / поля во внешнем запросе.В вашем нерабочем примере вы получите набор результатов, который выглядит как

+---------------+
| TABLE_NAME    |
+---------------+
| name_of_table |
+---------------+

, из которого вы затем попытаетесь отфильтровать поле customer_id, которого нет во внутреннем результате.

Вы можете динамически построить оператор запроса в хранимой процедуре и выполнить этот оператор, как подробно описано здесь: Как использовать динамический SQL в хранимой процедуре MySQL

Однако, при необходимоститакие динамические запросы обычно являются признаком плохого оформления таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...