【问题标题】:Getting table name by position(row) from database从数据库中按位置(行)获取表名
【发布时间】:2016-05-21 10:40:03
【问题描述】:

如何通过他的位置(行)获得表名?我有很多桌子。

例如,在从表中查找的列中,它是这样工作的:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'database name here' 
AND TABLE_NAME = 'table name here' 
AND ORDINAL_POSITION = 2;

我需要这样的东西只是为了通过它们在数据库中的位置(行)来查找表名。

使用 MySQL。 谢谢。

【问题讨论】:

  • 你能澄清一下你到底想要达到什么目标吗?也许是一个例子?这个问题有点难理解。
  • 例如获取数据库中的第二/第五个表名。
  • 为什么不直接使用LIMIT 1 OFFSET 1 来获得第二行?

标签: mysql sql


【解决方案1】:

如果我理解正确,你需要这样的东西

SELECT position, TABLE_NAME
FROM (

  SELECT @row := @row +1 AS position, TABLE_NAME
  FROM INFORMATION_SCHEMA.TABLES
  JOIN (
   SELECT @row :=0
  )r
  WHERE TABLE_SCHEMA =  'TABLE_SCHEMA here'
)tmp
WHERE position =5

另一种方法

SET @row =0;
SELECT TABLE_NAME
FROM (
   SELECT @row := @row +1 AS position, TABLE_NAME
   FROM INFORMATION_SCHEMA.TABLES
   WHERE TABLE_SCHEMA =  'TABLE_SCHEMA here'
)tmp
WHERE position =5

【讨论】:

  • 它有效,但我只需要表格的名称,我不需要显示位置和名称(当我说位置时,我的意思是在 WHERE 中使用它)。
  • 你可以选择任何你想要的 SELECT TABLE_NAME FROM (...) WHERE position IN (1,5,6)
  • 它在 MySQL 中工作,但是当我尝试在我的网站上打印它时,它说:必须定义参数'@row'。]
  • DECLARE @row int;SET @row = 0; 如果这不起作用,请阅读您的问题here
  • @Naveh 很高兴您得到满意的答案!
【解决方案2】:

看起来你想要这样的东西:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'database name here' 
AND TABLE_NAME = (
    SELECT TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'database name here'
    ORDER BY CREATE_TIME ASC
    LIMIT 1  -- take one
    OFFSET 1 -- after 1st row
)

这将返回作为该数据库的第二个表创建的表中的所有列。

【讨论】:

    猜你喜欢
    • 2011-06-06
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 2020-08-15
    相关资源
    最近更新 更多