如何从mysql的多个表中进行选择?

aelbi1ox  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(273)

我有很多table都是一样的 _ips 结局。例子:

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

我在试着 UNION 结果表,其中将包含所有 _ips table。为此,我使用:

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中使用数组作为表名?提前谢谢!

bvjxkvbb

bvjxkvbb1#

您可以通过使用动态查询和regexp来实现这一点:
此动态查询满足您的要求:

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;

相关问题