【问题标题】:How to get Top sample row along with Meta columns in MYSQL如何在 MYSQL 中获取顶级示例行和元列
【发布时间】:2022-01-22 04:31:25
【问题描述】:

我有提供有关数据库名称、表名称、列名称、表计数和样本第一行的信息的脚本。

脚本:

SELECT
  t.TABLE_SCHEMA  AS DB_NAME,
  t.TABLE_NAME,
  c.COLUMN_NAME,  
SUM(TABLE_ROWS) Tbl_Count,
 '' as sample_1st_Row
FROM  INFORMATION_SCHEMA.TABLES t
JOIN INFORMATION_SCHEMA.columns c ON t.TABLE_SCHEMA = c.TABLE_SCHEMA AND t.TABLE_NAME = c.TABLE_NAME
WHERE t.TABLE_SCHEMA = 'DB_Name' AND t.TABLE_NAME  IN ('EMP_TBL','DEPT_TBL')

例如,我正在为脚本获取如下数据:

DB_NAME  TABLE_NAME  COLUMN_NAME Tbl_Count  sample_1st_Row
EMP_DB   EMP_TBL     EMP_NAME     2000       
EMP_DB   DEPT_TBL    DEPT_NAME    50   

  

寻找这样的输出:

DB_NAME  TABLE_NAME  COLUMN_NAME Tbl_Count  sample_1st_Row
EMP_DB   EMP_TBL     EMP_NAME     2000       Mohan
EMP_DB   DEPT_TBL    DEPT_NAME    50         PHYSICS

在每个表和任何列中,我都在寻找前 1 条记录作为此脚本中的示例数据。 关于如何实现这一目标的任何建议。

【问题讨论】:

  • 将输出实例化为临时表,创建动态 sql 来更新临时表,运行动态 sql。

标签: mysql sql


【解决方案1】:

您的查询首先不会作为 INFORMATION_SCHEMA 运行。 TABLEs 没有 COLUMN_NAME

但是你可以用这个

SELECT
  t.TABLE_SCHEMA  AS DB_NAME,
  t.TABLE_NAME,
  c.COLUMN_NAME,  
SUM(TABLE_ROWS) Tbl_Count,
MAX(CASE WHEN  t.TABLE_NAME = 'EMP_TBL' AND COLUMN_NAME = 'EMP_NAME' THEN (SELECT `EMP_NAME`  FROM `EMP_TBL` ORDER BY EMP_ID LIMIT 1) 
WHEN  t.TABLE_NAME = 'DEPT_TBL' AND COLUMN_NAME = 'DEPT_NAME' THEN (SELECT `DEPT_NAME`  FROM `DEPT_TBL` ORDER BY DEPT_ID LIMIT 1) 
ELSE NULL
END) AS sample_1st_Row
FROM  INFORMATION_SCHEMA.TABLES t
JOIN INFORMATION_SCHEMA.columns c ON t.TABLE_SCHEMA = c.TABLE_SCHEMA AND t.TABLE_NAME = c.TABLE_NAME
WHERE t.TABLE_SCHEMA = 'DB_Name' AND t.TABLE_NAME  IN ('EMP_TBL','DEPT_TBL')
AND c.COLUMN_NAME IN ('EMP_NAME','DEPT_NAME')

这会给你类似的东西

DB_NAME TABLE_NAME  COLUMN_NAME Tbl_Count   sample_1st_Row
testdb  dept_tbl    DEPT_NAME   0           DEPName1
testdb  emp_tbl     EMP_NAME    0           Name1

员工和部门的选择只是一个示例,因为您需要加入那里才能从部门中获得员工

【讨论】:

  • 我有多个表和多个列@nbk..我不想是静态的
  • 这种自动化只有在所有表和列 a 的模式都相同的情况下才有可能,但即便如此。算法需要 sql 的固定结构
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多