SQL:查询数据库中所有表的字段,并在查询结果中返回表、字段、字段描述

Posted

技术标签:

【中文标题】SQL:查询数据库中所有表的字段,并在查询结果中返回表、字段、字段描述【英文标题】:SQL: query all tables in database for field and return table, field, field description in query results 【发布时间】:2020-10-01 12:39:56 【问题描述】:

这是我的第一个堆栈溢出问题。

我正在尝试查询包含多个表的 mysql 数据库以获取特定字段(如果存在)。对我来说不幸的是,我正在使用一个数据库,其中不同的字段值可能意味着不同的东西。

那部分没问题,但是我还需要在查询结果中返回表名。有越来越多的桌子。这是我卡住的部分。

这是我尝试过的。

    SELECT table_name FROM information_schema.tables
    WHERE table_schema = 'test_db'
            SELECT IF( EXISTS(
                 SELECT col_name, description
                 FROM table_name
                 WHERE col_name = field_value)) ;

我的逻辑(如有缺陷请指教,我是来学习的!)

    第一个查询选择数据库中的所有表进行查询 子查询仅返回那些具有我正在搜索的字段的表及其描述。

我希望我的结果看起来像这样:

------------------------------------------------
             query results
------------------------------------------------
table_name | query_field_val | field_description
-------------------------------------------------
table1     | foo             | foo is foo
-------------------------------------------------
table2     | foo             | foo is not bar
-------------------------------------------------
table3     | foo             | foo is in foobar    

这是一个表结构示例(表的数量越来越多,所以如果可能的话,我宁愿不要硬编码表名) 每个表都是不同数据库中另一个表的结果。它包含所有列值和描述。描述与架构无关,它只是一个字符串

---------------------------
          table_1
---------------------------
   col_values | desc
---------------------------
 foo          | foo foo foo
---------------------------
 bar          | bar bar bar
---------------------------
 foobar       | foobar foo

          table_2
---------------------------
   col_values | desc
---------------------------
 foo          | not bar
---------------------------
 foobar       | bar in bar

有没有更好的方法来做到这一点?

我希望这已经足够描述了!感谢您的观看。

【问题讨论】:

您能否解释一下 field_description 是什么或在哪里可以找到它。这里没有那种dev.mysql.com/doc/refman/8.0/en/columns-table.html 您好,我在原始问题中将 field_description 描述为 VARCHAR 的数据类型。 你的问题有点不清楚。 ,您可以在一个过程中执行此操作,您可以查看答案中给出的解决方案,并遍历所有结果。 可能无法准确获取您所说的内容。所以,请解释一下你需要对结果做什么。 【参考方案1】:

试试这个:

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA='test_db' AND column_name = 'col_name';

【讨论】:

这只会返回表格,对吧?我希望从这些表中返回表名、col_name 和描述。 嗨@paulinusia,但是col_name 和descriptions 的值应该大于1,那么您希望它们如何与table_name 一起出现在一行中?

以上是关于SQL:查询数据库中所有表的字段,并在查询结果中返回表、字段、字段描述的主要内容,如果未能解决你的问题,请参考以下文章

将一个表的查询结果插入到另一个表中(oracle、mysql、sql 、GP)

SQL查询字段名

hibernate框架之-查询结果集返回类型

Oracle数据库-多表联合查询&子查询

SQL中,如何查询存在一个表的字段而不在另一个表的字段中的数据记录?

怎样用SQL查询一个表的所有字段