【问题标题】:How to query all tables in a database如何查询数据库中的所有表
【发布时间】:2018-12-20 10:40:15
【问题描述】:

我正在编写 MySQL 以从数据库中的所有表中获取所有唯一 ID。

数据库有诸如record_20181201、record_20181202、...之类的表

表格是根据日期自动生成的(所有表格都具有相同的架构,并且一列名称是visitorId)。

我做的SQL查询是这样的,

SELECT UNIQUE(visitorId) FROM databaseName.record_20181201;

我一次只能用这个查询一个表..

有没有办法查询数据库中的所有表并在那里选择所有唯一的visitorId?

【问题讨论】:

  • @RiggsFolly 感谢您的回答。你能详细说明一下吗(也许是示例代码)?我是 SQL 新手。
  • 每个日期使用不同的表格?
  • 旁注:听起来可能是糟糕的数据库设计让多个表都具有相同的模式。您是否有机会将表格合并为一个表格,并使用日期列进行区分?
  • @TimBiegeleisen 可能 ????? :)
  • @RiggsFolly 也许如果 OP 在每个数据中接收大量数据,它可能在逻辑上是合理的。但是,即使在这种情况下,最好还是有一个带有某种分区的逻辑表。

标签: mysql sql database datatable


【解决方案1】:
SELECT DISTINCT VisitorID FROM DBName.Table1
 UNION 
SELECT DISTINCT VisitorID FROM DBName.Table2 
 UNION 
SELECT DISTINCT VisitorID FROM DBName.Table3

试试这个!!!!!!希望这会有所帮助..

【讨论】:

  • 一个更完美的答案是操作不必每天都添加联合声明。
  • 请记住,完美在旁观者的眼中,只有:)
  • 或者至少可以自动添加新的联合语句。这就是我 20 年前处理类似问题的方式。但是,自动化是用脚本语言完成的,而不是 SQL。可以在 SQL 中编写脚本生成查询,但该技术与初级技术相比。请记住,OP 是 SQL 的新手。
  • 我必须同意 P.Salmon 的观点。数据库有上百张表,而且每天都会生成新表……我真的不想手动将它们全部UNION。
【解决方案2】:

您可以使用 INFORMATION_SCHEMA 中的 UNION 生成查询字符串。

然后运行该查询,或将其放入视图中。

UNION 将返回联合查询的唯一组合结果。
UNION ALL 只会将结果粘在一起。

SELECT GROUP_CONCAT(Qry ORDER BY TblSchema, TblName SEPARATOR ' UNION ')
FROM
(
  SELECT 
   TABLE_SCHEMA as TblSchema,
   TABLE_NAME as TblName,
   CONCAT('select visitorId from ',TABLE_SCHEMA,'.',TABLE_NAME,'\r\n') as Qry
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_NAME LIKE 'record_201812%' 
    AND COLUMN_NAME = 'visitorId'
) Q;

【讨论】:

  • 我认为应该是 TABLE_NAME LIKE 'record_%'
  • 除了第一个条目外,所有条目的 SELECT 词前面都应该有 UNION 这个词。
  • @WalterMitty 这取决于 Emma 是想从所有这些记录表中选择,还是只选择一个特定的月份。并且 group_concat 只会在查询之间放置“联合”。
  • 谢谢。我没有抓住 GROUP_CONCAT。
【解决方案3】:

在查询下方运行,您将获得一个查询,该查询将为所有表提供唯一的 visitorId。

SELECT 
    CONCAT('SELECT DISTINCT visitorId FROM (',
            REPLACE(query_string, ',', ' UNION '),
            ') union_table') AS final_query
FROM
    (SELECT 
        CONCAT(GROUP_CONCAT('SELECT visitorId FROM ', table_name)) AS query_string
    FROM
        information_schema.tables
    WHERE
        table_name LIKE 'record_%') table_a; 

您将获得以下查询,该查询将从所有表中获取唯一的 visitorId。

SELECT DISTINCT
    visitorId
FROM
    (
    SELECT visitorId FROM record_20181201 
        UNION 
    SELECT visitorId FROM record_20181202 
        UNION 
    SELECT visitorId FROM record_20181203
    ) union_table

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    相关资源
    最近更新 更多