MySqlのinformation_schemaからテーブル、列、制約のすべての属性をフェッチしています
select t.*,c.*,k.*
from information_schema.tables t
inner join information_schema.COLUMNS c on c.table_name=t.table_name
left outer join information_schema.key_column_usage k on
c.column_name=k.column_name
and k.table_name=t.table_name and k.referenced_column_name is not NULL
where t.table_schema='test' order by t.table_name;
このクエリの問題は、同じ名前の他のデータベースにテーブルがある場合、この特定のデータベースのwhere条件が明確であっても、そのテーブルの列も取得することです。
左外部結合を使用しない場合、すべての列が外部キーではないため、多くの列が欠落していることがわかります
このクエリを少しガイダンスとともに改善する必要がありますが、まったく異なるソリューションも受け入れられます。
改善されたクエリの結果の行数は、
select count(*) from information_schema.columns c where c.table_schema='test';
事前に助けてくれてありがとう:)