mysql中查询语句的表名,是不是可以动态选择表名像这样

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql中查询语句的表名,是不是可以动态选择表名像这样相关的知识,希望对你有一定的参考价值。

select * from
case tablename
when 'dd' then 表一
when 'fff' then 表二
end;

参考技术A 单纯的SQL没有这么写的,如果是其他程式开发语言,可以直接拼SQL;
如果是存储过程,可以试试动态SQL
set @sql_1 = " select * from .......limit ? ";
prepare stmt from @sql_1;
execute stmt using @step;
deallocate prepare stmt;
commit;
参考技术B 像这种纯sql是无法完成这种功能的,你可以写一个函数,像其他编程语言一样,把这两个表名当做参数进行传入, 参考技术C 像什么样子,你表述清楚啊。

如果对回答满意,请点【采纳答案】,如果还有问题,请点【追问】
希望我的回答对您有所帮助,希望能采纳。
参考技术D 这种情况要用动态sql 拼接完成 第5个回答  2012-04-09 没有这么写的。

必须是固定的表名。

在 MySQL 中使用 SELECT 语句获取表名

【中文标题】在 MySQL 中使用 SELECT 语句获取表名【英文标题】:Get table names using SELECT statement in MySQL 【发布时间】:2012-01-10 04:38:42 【问题描述】:

在 MySQL 中,我知道我可以列出数据库中的表:

SHOW TABLES

但是,我想将这些表名插入到另一个表中,例如:

INSERT INTO metadata(table_name) SHOW TABLES /* does not work */

有没有办法使用标准的 SELECT 语句获取表名,例如:

INSERT INTO metadata(table_name) SELECT name FROM table_names /* what should table_names be? */

【问题讨论】:

***.com/questions/64894/… 的可能重复项 【参考方案1】:

查看数据库information_schema 中的表TABLES。它包含有关其他数据库中表的信息。但如果您使用的是共享主机,您可能无法访问它。

【讨论】:

【参考方案2】:

我认为您可以从 INFORMATION_SCHEMA TABLES 中获取您想要的数据。

您可以在这里找到更多信息:http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

【讨论】:

【参考方案3】:

试试:

select * from information_schema.tables

见:http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

【讨论】:

这指向了正确的方向,但并没有真正回答问题。可以详细说明。 @MuriloGarcia information_schema 是 SQL 标准的一部分。 Postgres 也有。对于 SQLite,请查看 sqlite_master 使用 LIKE 按名称获取表:SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME LIKE '%keyword%';【参考方案4】:

除了使用 INFORMATION_SCHEMA 表之外,要使用 SHOW TABLES 插入表中,您可以使用以下方法

<?php
 $sql = "SHOW TABLES FROM $dbname";
 $result = mysql_query($sql);
 $arrayCount = 0
 while ($row = mysql_fetch_row($result)) 
  $tableNames[$arrayCount] = $row[0];
  $arrayCount++; //only do this to make sure it starts at index 0
 
 foreach ($tableNames as &$name 
  $query = "INSERT INTO metadata (table_name) VALUES ('".$name."')";
  mysql_query($query);
 
?>

【讨论】:

【参考方案5】:

要获取所有表的名称,请使用:

SELECT table_name FROM information_schema.tables;

要从特定数据库中获取表的名称,请使用:

SELECT table_name FROM information_schema.tables
WHERE table_schema = 'your_database_name';

现在,要回答原始问题,请使用以下查询:

INSERT INTO table_name
    SELECT table_name FROM information_schema.tables
        WHERE table_schema = 'your_database_name';

更多详情见:http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

【讨论】:

【参考方案6】:

如果我们有多个数据库并且我们需要为特定数据库选择所有表,我们可以使用TABLE_SCHEMA 将数据库名称定义为:

select table_name from information_schema.tables where TABLE_SCHEMA='dbname';

【讨论】:

【参考方案7】:

要插入、更新和删除,请执行以下操作:

$teste = array('LOW_PRIORITY', 'DELAYED', 'HIGH_PRIORITY', 'IGNORE', 'INTO', 'INSERT', 'UPDATE', 'DELETE', 'QUICK', 'FROM');
$teste1 = array("\t", "\n", "\r", "\0", "\x0B");
$strsql = trim(str_ireplace($teste1, ' ', str_ireplace($teste, '', $strsql)));
$nomeTabela = substr($strsql, 0, strpos($strsql, ' '));

print($nomeTabela);
exit;

【讨论】:

我们在这里期待英语。但是,我们确实有一个葡萄牙语网站:pt.***.com【参考方案8】:
SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'DATABASE'

【讨论】:

能否请您为您的答案添加更多上下文。仅代码的答案很难理解。如果您可以在帖子中添加更多信息,这将对提问者和未来的读者都有帮助。【参考方案9】:

MySQL INFORMATION_SCHEMA.TABLES 表包含关于表(不是临时的而是永久的)和视图的数据。列TABLE_TYPE 定义这是表记录还是视图记录(表TABLE_TYPE='BASE TABLE' 和视图TABLE_TYPE='VIEW')。因此,如果您只想从架构(数据库)表中查看,则只有以下查询:

SELECT *
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='myschema'

【讨论】:

【参考方案10】:

还有另一种更简单的方法来获取表名

SHOW TABLES FROM <database_name>

【讨论】:

这根本不能回答问题。 在我搜索符合问题标题的内容时帮助了我。 没有。这不好,因为它只显示 mysql 工具中的表。【参考方案11】:

我认为指出,如果您想选择包含特定单词的表格,您可以使用SELECT(而不是SHOW)轻松完成,这可能会有所帮助。下面的查询很容易将搜索范围缩小到包含“关键字”的表

SELECT *
FROM information_schema.tables
WHERE table_name like "%keyword%"

【讨论】:

【参考方案12】:

以下查询对我有用。这可以显示数据库、表、列名、数据类型和列数。

**select table_schema Schema_Name ,table_name TableName,column_name ColumnName,ordinal_position "Position",column_type DataType,COUNT(1) ColumnCount
FROM information_schema.columns
GROUP by table_schema,table_name,column_name,ordinal_position, column_type;**

【讨论】:

【参考方案13】:

获取所有表的名称:

SELECT table_name 
FROM information_schema.tables;

如果您需要为特定数据库获取它:

SELECT table_name 
FROM information_schema.tables
WHERE table_schema = 'your_db_name';

输出:

+--------------------+
| table_name         |
+--------------------+
| myapp              |
| demodb             |
| cliquein           |
+--------------------+
3 rows in set (0.00 sec)

【讨论】:

以上是关于mysql中查询语句的表名,是不是可以动态选择表名像这样的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 动态sql语句运行 用时间做表名

怎么查询mysql部分表的表名

如何按条件查询MYSQL数据库中的表名

PHP + Mysql:来自第一个查询的动态表名,用于执行第二个查询

如何查询一个ACCESS数据库中的表名和字段?

如何按条件查询MYSQL数据库中的表名(求高手指点)