(My) SQL: подстановочный знак в предложении FROM? - PullRequest
0 голосов
/ 09 сентября 2011

У меня есть база данных с примерно 200 таблицами, и мне нужно выполнить запрос ко всем таблицам, содержащим определенный столбец (creation_date), но не во всех таблицах есть этот столбец. SELECT * FROM * WHERE creation_date>=42, очевидно, не работает, но как лучше всего это сделать?

Ответы [ 3 ]

2 голосов
/ 09 сентября 2011
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, TABLE_NAME,
 FROM INFORMATION_SCHEMA.COLUMNS
 WHERE table_name = 'tbl_name'
  [AND table_schema = 'db_name']
  [AND column_name ='creation_date'] 

скопировано непосредственно из MySQL - вам нужно перебрать эти системные таблицы, и список будет содержать их ...

тогда вы можете создавать свои операторы SQL и быть уверенными, что они работают ...

0 голосов
/ 09 сентября 2011

Вы можете построить динамический запрос SQL из метаданных. Я хотел бы подойти к этому как:

  1. Получить список таблиц
  2. Для каждой таблицы
  3. Проверьте, есть ли в таблице столбец creation_date
  4. Если это так, добавьте свой запрос к этой таблице в динамический запрос
  5. Объединение результатов вместе

Вы также можете создать представление для нескольких таблиц. Тогда вы можете просто запросить представление.

0 голосов
/ 09 сентября 2011

Вы можете попробовать включить таблицу, которую вы хотите запросить, следующим образом:

SELECT * FROM table1 a, table2 b WHERE a.creation_date>=42

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

Таким образом, в примере запроса table1 (псевдоним a) имеет столбец, а table2 (псевдоним b) - нет.

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