MySQL 在多个数据库中搜索价值

Posted

技术标签:

【中文标题】MySQL 在多个数据库中搜索价值【英文标题】:MySQL Searching for value across multiple databases 【发布时间】:2015-11-05 13:34:01 【问题描述】:

我是 mysql 新手,我很难理解如何跨多个数据库进行查询。

解释基础架构,我目前正在执行一项任务,我在一个公共测试数据库中,该数据库具有一组数据库。

我有一个标识符值,我想在我知道存在于特定表中的所有数据库中进行搜索。在此示例中,我将使用表名“table1”。问题是,并非所有数据库都拥有我在表中查找的标识符列。

我的问题涉及两个部分: -如何搜索所有数据库以返回包含此列中特定值的所有数据库名称的集合 (table1.id) -如何验证该列是否存在,以便我可以实际进行检查以查看我要查找的 id 是否与其他数据库的 table1.id 值匹配?

在较小的范围内,我制定了检查单个表的代码:

SELECT * FROM table1
WHERE searchId = db1.table1.id;

不同之处在于,我想在所有数据库 table1 中搜索该特定值,同时确保该列首先存在于表中。

【问题讨论】:

您“在一个拥有数据库集合的公共测试数据库中”。你到底是什么意思? 我正在使用一个包含多个数据库的数据库,即:db1 db2 db3 ... 然后,在每个数据库中,有一组表不一定与另一个相同数据库。 你的意思是模式吗?在 MySQL 中也是一样的……见这里:***.com/questions/11618277/… 【参考方案1】:

可以通过查询information_schema获取MySQL中表的列:

SELECT column_name 
FROM information_schema.columns 
WHERE table_schema = 'myschema' -- "database"
AND table_name ='mytablename'

【讨论】:

【参考方案2】:

这应该让你开始:

SELECT table_schema 
FROM information_schema.columns 
WHERE table_name = 'table1' AND column_name = 'id'
;

据此,您可以使用所用的任何编程语言来编写针对每个数据库的特定查询。

另外,我最近发现与此类似的边缘滥用行为很有帮助。

SELECT CONCAT("SELECT '", table_schema, "' "
              "FROM `", table_schema, "`.`", table_name, "` "
              "WHERE `", column_name, "` = ", searchId
       ) AS qStr
FROM information_schema.columns 
WHERE table_name = 'table1' AND column_name = 'id'
;

您将这个结果连接在一起,UNION 介于两者之间,生成的查询应该会为您提供所有模式的列表,这些模式的表具有该名称(和列),其值与 searchId 匹配。

编辑:用单引号替换了上面不适当的反引号,并且...在下面添加了这个。

SET @criteriaVal := "'somestring'";
-- SET @criteriaVal := 3; -- for example

SELECT CONCAT("SELECT '", table_schema, "' "
              "FROM `", table_schema, "`.`", table_name, "` "
              "WHERE `", column_name, "` = ", @criteriaVal
       ) AS qStr
FROM information_schema.columns 
WHERE table_name = 'table1' AND column_name = 'id'
;

【讨论】:

请原谅我缺乏语法知识,但考虑到您提到“searchId”的第二个编码块如果我想对您第一次编码输出的所有数据库进行搜索块上的标识符,如“RNASEQG00000000001”我如何将其合并到您的第二个编码块中进行搜索? 只需将"WHERE ", column_name, " = ", searchId 更改为WHERE ", column_name, " = 'RNASEQG00000000001' " @dpark 查看编辑以获得更通用的两个语句解决方案。 在您的帮助下,我能够为每个有效表生成一个带有查询语句的字符串列表,这正是我想要的。但是,为了将这些 SELECT 语句的所有结果合并到一个输出中,我将使用什么语法? 这取决于你的编程环境。

以上是关于MySQL 在多个数据库中搜索价值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MySQL 数据库中搜索特定列名? [复制]

在对象数组中搜索具有特定值的特定键

在 mysql 的表中搜索特定行值的列名

spring-data-elasticsearch 在多个索引中搜索特定字段

哪种 C# 数据结构允许最有效地在一对字符串中搜索子字符串?

在所有表中搜索具有给定值或名称的字段[重复]