求一个SQL语句,在一个库中搜索一个值返回有这个值的表名

时间:2020-12-25 21:56:47
求一个SQL语句,在一个库中搜索一个值返回有这个值的表名

23 个解决方案

#1


没有 这样的SQL语句,用SP解决

#2


用程序或者存储过程,去访问 INFORMATION_SCHEMA.COLUMNS 表得到所有的列名,表名。然后通过程序语句生成 select * from xxx where col1 like ... or col2 like ...的SQL语句分别执行以判断是否有结果返回。

具体语句可以先参考MYSQL官方免费手册中的例子自己先写一下。

#3


这需求好奇怪  需要拿到表名

#4


存储过程实现吧。

#5


引用 2 楼 ACMAIN_CHM 的回复:
用程序或者存储过程,去访问 INFORMATION_SCHEMA.COLUMNS 表得到所有的列名,表名。然后通过程序语句生成 select * from xxx where col1 like ... or col2 like ...的SQL语句分别执行以判断是否有结果返回。

具体语句可以先参考MYSQL官方免费手册中的例子自己先写一下。


我只会“SELECT 列名称 FROM 表名称 WHERE 列 运算符 值”但是我想有更方便的方法,教程下载了。请问你说的程序语句的关键词是什么,我先看看我能看懂不

#6


不明白需求。。讲得不够清楚。如果要表名,你查询的时候,直接写死在字段里面这样可以吗?

#7


引用 6 楼 tashiwoweiyi 的回复:
不明白需求。。讲得不够清楚。如果要表名,你查询的时候,直接写死在字段里面这样可以吗?


求例句:在一个库中搜索一个值返回有这个值的表名
能达到这个效果就可以

#8


不太明白,下面写了2种。
1、-- 从系统表,拿表名、字段名。
select TABLE_NAME from information_schema.TABLES where TABLE_NAME='TB_Member' and TABLE_SCHEMA='member'

2、直接在查询语句中写死。
select *,'TB_Test' as TableName from test.TB_Test where 1=1;

#9


引用 8 楼 tashiwoweiyi 的回复:
不太明白,下面写了2种。
1、-- 从系统表,拿表名、字段名。
select TABLE_NAME from information_schema.TABLES where TABLE_NAME='TB_Member' and TABLE_SCHEMA='member'

2、直接在查询语句中写死。
select *,'TB_Test' as TableName from test.TB_Test where 1=1;


用第一个没有效果,我在整理一下语句。
在一个数据库中的所有表中的所有列中所有一个数值。

#10


引用 8 楼 tashiwoweiyi 的回复:
不太明白,下面写了2种。
1、-- 从系统表,拿表名、字段名。
select TABLE_NAME from information_schema.TABLES where TABLE_NAME='TB_Member' and TABLE_SCHEMA='member'

2、直接在查询语句中写死。
select *,'TB_Test' as TableName from test.TB_Test where 1=1;


第二句“select * ,'TB_Test' as TableName from test.TB_Test where 1=1;”报错
“[SQL] select * ,'TB_Test' as TableName from test.TB_Test where 1=1;
[Err] 1146 - Table 'test.tb_test' doesn't exist”,

所以我看了下第一句,我想是不是说在information_schema.TABLES表中搜索TABLE_NAME列的值如果TABLE_NAME='TB_Member'与TABLE_SCHEMA='member'为真就返回?
我SQL是在太差了,不过我想说的是搜索有这个数值的表,而不是在一个数据库中搜索一个表名。可能我说的不太清除。

#11


你说第一个没效果,那肯定啦,你要把表名改成你自己所需的。
其次,你说第二个会报错,test数据库、TB_Test表你都没有你能运行?

最后:
其实你自己需求都不太清楚,我就说怎么会有你所说的这种要求。。
而且你最后所说的“搜索有这个数值的表,而不是在一个数据库中搜索一个表名”
这并不是SQL差不差的问题,我想说的是,你对需求还没说清楚!

可能是我理解能力有问题了!

#12


引用 11 楼 tashiwoweiyi 的回复:
你说第一个没效果,那肯定啦,你要把表名改成你自己所需的。
其次,你说第二个会报错,test数据库、TB_Test表你都没有你能运行?

最后:
其实你自己需求都不太清楚,我就说怎么会有你所说的这种要求。。
而且你最后所说的“搜索有这个数值的表,而不是在一个数据库中搜索一个表名”
这并不是SQL差不差的问题,我想说的是,你对需求还没说清楚!

可能是我理解能力有问题了!


在一个库中搜索一个值返回有这个值的表名
这个不清楚吗?不好意思,那我在详细点说,“我要返回一个数据库中拥有指定数值的表名和列名”。或者说“我想在一个数据库中的所有表的所有列中搜索一个值,返回匹配这个值的表名列明”这个你看还清楚吗?

#13


恩。跟我想的一样。。其实你一开始就这样说,不就好了嘛!

#14


引用 13 楼 tashiwoweiyi 的回复:
恩。跟我想的一样。。其实你一开始就这样说,不就好了嘛!

。。。那例句呢?

#15


步骤:
1、获取mysql中的系统表【TABLES】,某个数据库中的所有表名,根据该表名关联查询系统表中的【COLUMNS】,拿到所有表中的字段
2、然后循环查询该表中,该字段的值是否等于你所要查的值。
3、如果相等记录该表名及字段名,可以把该记录存放在临时表中。
4、循环结束、查询该临时表,就是你所想要的结果。
5、删除临时表。

#16


引用 15 楼 tashiwoweiyi 的回复:
步骤:
1、获取mysql中的系统表【TABLES】,某个数据库中的所有表名,根据该表名关联查询系统表中的【COLUMNS】,拿到所有表中的字段
2、然后循环查询该表中,该字段的值是否等于你所要查的值。
3、如果相等记录该表名及字段名,可以把该记录存放在临时表中。
4、循环结束、查询该临时表,就是你所想要的结果。
5、删除临时表。


谢谢,不过我对sql语言不熟悉,能否给出例句?或者一步一步怎么写的步奏。不胜感谢

#17


引用 1 楼 WWWWA 的回复:
没有 这样的SQL语句,用SP解决

看看MYSL的HELP
打开游标(系统TABLES、COLUMNS)->字符串累加生成SQL语句的方法,判断COLUMNS中有无满足条件的记录
自己动手做一下吧,有问题再问

#18


真心不想说!都已经告诉你步骤了。还不够?拿现成的有什么好,万一以后有变化,你不是又要问。
自己动手做,发现问题在解决不更好?

#19


引用 18 楼 tashiwoweiyi 的回复:
真心不想说!都已经告诉你步骤了。还不够?拿现成的有什么好,万一以后有变化,你不是又要问。
自己动手做,发现问题在解决不更好?

没有错,估计楼主是想要现成的代码

#20


引用 18 楼 tashiwoweiyi 的回复:
真心不想说!都已经告诉你步骤了。还不够?拿现成的有什么好,万一以后有变化,你不是又要问。
自己动手做,发现问题在解决不更好?


别生气,来论坛上是为了交流而不是为了生气的。我是一点也不会mysql所以悉心请教,我想到了你说的这个问题,所以我的问题就是一个最大的,不会在发生变化的问题。我也不会在问这个问题的衍生问题。我只要是做项目的,但是眼下项目的确遇到了这个难点。

#21


引用 19 楼 WWWWA 的回复:
Quote: 引用 18 楼 tashiwoweiyi 的回复:

真心不想说!都已经告诉你步骤了。还不够?拿现成的有什么好,万一以后有变化,你不是又要问。
自己动手做,发现问题在解决不更好?

没有错,估计楼主是想要现成的代码


的确,我想要的是现成的代码,并且告知我更改那个地方配合什么才能取得结果。

#22


现在还没实现?

#23


引用 22 楼 tashiwoweiyi 的回复:
现在还没实现?

现在实现了,将数据库导出sql文件后用txt打开就可以达到全文搜索了,但是由于要经常用到这个搜索,因为还是希望能有更简便的方法。

#1


没有 这样的SQL语句,用SP解决

#2


用程序或者存储过程,去访问 INFORMATION_SCHEMA.COLUMNS 表得到所有的列名,表名。然后通过程序语句生成 select * from xxx where col1 like ... or col2 like ...的SQL语句分别执行以判断是否有结果返回。

具体语句可以先参考MYSQL官方免费手册中的例子自己先写一下。

#3


这需求好奇怪  需要拿到表名

#4


存储过程实现吧。

#5


引用 2 楼 ACMAIN_CHM 的回复:
用程序或者存储过程,去访问 INFORMATION_SCHEMA.COLUMNS 表得到所有的列名,表名。然后通过程序语句生成 select * from xxx where col1 like ... or col2 like ...的SQL语句分别执行以判断是否有结果返回。

具体语句可以先参考MYSQL官方免费手册中的例子自己先写一下。


我只会“SELECT 列名称 FROM 表名称 WHERE 列 运算符 值”但是我想有更方便的方法,教程下载了。请问你说的程序语句的关键词是什么,我先看看我能看懂不

#6


不明白需求。。讲得不够清楚。如果要表名,你查询的时候,直接写死在字段里面这样可以吗?

#7


引用 6 楼 tashiwoweiyi 的回复:
不明白需求。。讲得不够清楚。如果要表名,你查询的时候,直接写死在字段里面这样可以吗?


求例句:在一个库中搜索一个值返回有这个值的表名
能达到这个效果就可以

#8


不太明白,下面写了2种。
1、-- 从系统表,拿表名、字段名。
select TABLE_NAME from information_schema.TABLES where TABLE_NAME='TB_Member' and TABLE_SCHEMA='member'

2、直接在查询语句中写死。
select *,'TB_Test' as TableName from test.TB_Test where 1=1;

#9


引用 8 楼 tashiwoweiyi 的回复:
不太明白,下面写了2种。
1、-- 从系统表,拿表名、字段名。
select TABLE_NAME from information_schema.TABLES where TABLE_NAME='TB_Member' and TABLE_SCHEMA='member'

2、直接在查询语句中写死。
select *,'TB_Test' as TableName from test.TB_Test where 1=1;


用第一个没有效果,我在整理一下语句。
在一个数据库中的所有表中的所有列中所有一个数值。

#10


引用 8 楼 tashiwoweiyi 的回复:
不太明白,下面写了2种。
1、-- 从系统表,拿表名、字段名。
select TABLE_NAME from information_schema.TABLES where TABLE_NAME='TB_Member' and TABLE_SCHEMA='member'

2、直接在查询语句中写死。
select *,'TB_Test' as TableName from test.TB_Test where 1=1;


第二句“select * ,'TB_Test' as TableName from test.TB_Test where 1=1;”报错
“[SQL] select * ,'TB_Test' as TableName from test.TB_Test where 1=1;
[Err] 1146 - Table 'test.tb_test' doesn't exist”,

所以我看了下第一句,我想是不是说在information_schema.TABLES表中搜索TABLE_NAME列的值如果TABLE_NAME='TB_Member'与TABLE_SCHEMA='member'为真就返回?
我SQL是在太差了,不过我想说的是搜索有这个数值的表,而不是在一个数据库中搜索一个表名。可能我说的不太清除。

#11


你说第一个没效果,那肯定啦,你要把表名改成你自己所需的。
其次,你说第二个会报错,test数据库、TB_Test表你都没有你能运行?

最后:
其实你自己需求都不太清楚,我就说怎么会有你所说的这种要求。。
而且你最后所说的“搜索有这个数值的表,而不是在一个数据库中搜索一个表名”
这并不是SQL差不差的问题,我想说的是,你对需求还没说清楚!

可能是我理解能力有问题了!

#12


引用 11 楼 tashiwoweiyi 的回复:
你说第一个没效果,那肯定啦,你要把表名改成你自己所需的。
其次,你说第二个会报错,test数据库、TB_Test表你都没有你能运行?

最后:
其实你自己需求都不太清楚,我就说怎么会有你所说的这种要求。。
而且你最后所说的“搜索有这个数值的表,而不是在一个数据库中搜索一个表名”
这并不是SQL差不差的问题,我想说的是,你对需求还没说清楚!

可能是我理解能力有问题了!


在一个库中搜索一个值返回有这个值的表名
这个不清楚吗?不好意思,那我在详细点说,“我要返回一个数据库中拥有指定数值的表名和列名”。或者说“我想在一个数据库中的所有表的所有列中搜索一个值,返回匹配这个值的表名列明”这个你看还清楚吗?

#13


恩。跟我想的一样。。其实你一开始就这样说,不就好了嘛!

#14


引用 13 楼 tashiwoweiyi 的回复:
恩。跟我想的一样。。其实你一开始就这样说,不就好了嘛!

。。。那例句呢?

#15


步骤:
1、获取mysql中的系统表【TABLES】,某个数据库中的所有表名,根据该表名关联查询系统表中的【COLUMNS】,拿到所有表中的字段
2、然后循环查询该表中,该字段的值是否等于你所要查的值。
3、如果相等记录该表名及字段名,可以把该记录存放在临时表中。
4、循环结束、查询该临时表,就是你所想要的结果。
5、删除临时表。

#16


引用 15 楼 tashiwoweiyi 的回复:
步骤:
1、获取mysql中的系统表【TABLES】,某个数据库中的所有表名,根据该表名关联查询系统表中的【COLUMNS】,拿到所有表中的字段
2、然后循环查询该表中,该字段的值是否等于你所要查的值。
3、如果相等记录该表名及字段名,可以把该记录存放在临时表中。
4、循环结束、查询该临时表,就是你所想要的结果。
5、删除临时表。


谢谢,不过我对sql语言不熟悉,能否给出例句?或者一步一步怎么写的步奏。不胜感谢

#17


引用 1 楼 WWWWA 的回复:
没有 这样的SQL语句,用SP解决

看看MYSL的HELP
打开游标(系统TABLES、COLUMNS)->字符串累加生成SQL语句的方法,判断COLUMNS中有无满足条件的记录
自己动手做一下吧,有问题再问

#18


真心不想说!都已经告诉你步骤了。还不够?拿现成的有什么好,万一以后有变化,你不是又要问。
自己动手做,发现问题在解决不更好?

#19


引用 18 楼 tashiwoweiyi 的回复:
真心不想说!都已经告诉你步骤了。还不够?拿现成的有什么好,万一以后有变化,你不是又要问。
自己动手做,发现问题在解决不更好?

没有错,估计楼主是想要现成的代码

#20


引用 18 楼 tashiwoweiyi 的回复:
真心不想说!都已经告诉你步骤了。还不够?拿现成的有什么好,万一以后有变化,你不是又要问。
自己动手做,发现问题在解决不更好?


别生气,来论坛上是为了交流而不是为了生气的。我是一点也不会mysql所以悉心请教,我想到了你说的这个问题,所以我的问题就是一个最大的,不会在发生变化的问题。我也不会在问这个问题的衍生问题。我只要是做项目的,但是眼下项目的确遇到了这个难点。

#21


引用 19 楼 WWWWA 的回复:
Quote: 引用 18 楼 tashiwoweiyi 的回复:

真心不想说!都已经告诉你步骤了。还不够?拿现成的有什么好,万一以后有变化,你不是又要问。
自己动手做,发现问题在解决不更好?

没有错,估计楼主是想要现成的代码


的确,我想要的是现成的代码,并且告知我更改那个地方配合什么才能取得结果。

#22


现在还没实现?

#23


引用 22 楼 tashiwoweiyi 的回复:
现在还没实现?

现在实现了,将数据库导出sql文件后用txt打开就可以达到全文搜索了,但是由于要经常用到这个搜索,因为还是希望能有更简便的方法。