Как выбрать из нескольких таблиц в MySQL? - PullRequest
0 голосов
/ 30 декабря 2018

У меня много таблиц с одинаковыми _ips окончаниями.Пример:

first-domain.com_ips
secons-domain.com_ips
...

Я пытаюсь получить таблицу результатов UNION, которая будет содержать все строки из всех таблиц _ips.Для этого я использую:

SELECT id, expirationDate FROM `first-domain.com_ips` WHERE isBlocked = 1
UNION
SELECT id, expirationDate FROM `secons-domain.com_ips` WHERE isBlocked = 1
...;

У меня есть массив, который состоит из доменных имен.Поэтому я ищу способ использования этого массива домена в запросе SQL.Может быть, что-то подобное мы используем с SELECT.Пример:

const ids = [3, 4, 6, 8];
const query = 'SELECT * FROM table WHERE id IN (' + ids.join() + ')';

Есть ли способ использовать массив для имен таблиц в SQL?Заранее спасибо!

1 Ответ

0 голосов
/ 30 декабря 2018

Вы можете сделать это, используя динамические запросы и регулярные выражения:

Этот динамический запрос делает то, что вы хотите:

SELECT
  GROUP_CONCAT(
    CONCAT(
      'SELECT * FROM `',
      TABLE_NAME,
      '`') SEPARATOR ' UNION ALL ')
FROM
  `INFORMATION_SCHEMA`.`TABLES` 
WHERE
  `TABLE_NAME` REGEXP '_ips$'
INTO @sql;

SELECT @sql;

PREPARE stmt FROM @sql;
EXECUTE stmt;

Этот запрос дает два вывода, во-первых, это последняя строка запроса SQLкоторый выглядит следующим образом:

SELECT * FROM `first-domain.com_ips` UNION ALL SELECT * FROM `second-domain.com_ips`

, а другой вывод - это фактические данные из всех таблиц. Если вам нужны только окончательные данные, вы можете удалить этот оператор:

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