以下SQL的运行基于8.x
版本,较低版本可能无法执行,报错为: > 1305 - FUNCTION x.help_topic_id does not exist。
1.SQL示例
SELECT a.id, a.tablename, a.type, CASE a.tablename WHEN 'information' THEN concat( a.type, ',', m.information ) WHEN 'describe' THEN concat( a.type, ',', n.DESCRIBE ) END AS info FROM ( SELECT t.id, t.tablename, SUBSTRING_INDEX( SUBSTRING_INDEX( t.devid, ',', x.help_topic_id + 1 ), ',',- 1 ) AS type FROM oneTable t JOIN mysql.help_topic x ON x.help_topic_id ( LENGTH( t.type ) - LENGTH( REPLACE ( t.type, ',', '' ) ) + 1 ) ) a LEFT JOIN informationTable m ON a.type = m.id LEFT JOIN describeTable n ON a.type = n.id
大概看一下help_topic
的数据:
2.SQL说明
- mysql.help_topic 为MySQL的元数据表,
- LENGTH( t.type ) - LENGTH( REPLACE ( t.type, ‘,’, ‘’ ) ) + 1 计算出了拆分成的行数,
- JOIN mysql.help_topic x ON x.help_topic_id ( LENGTH( t.type ) - LENGTH( REPLACE ( t.type, ‘,’, ‘’ ) ) + 1 ) 是一个笛卡儿积联结,
- SUBSTRING_INDEX( SUBSTRING_INDEX( t.devid, ‘,’, x.help_topic_id + 1 ), ‘,’,- 1 ) 分别获取了
,
分割的数据。