2016-07-07 11 views
0

私はテーブル内のすべての外部キーがインデックスされているフィールドを参照していることを確認するためにクイッククエリを実行しています。次のようにクエリの結果が重複して受け取られました。information_schema

私のコードは次のとおりです。

select table_name, column_name, index_name from statistics where table_name in (select referenced_table_name from key_column_usage where table_name='table' and table_schema='schema') and column_name in (select referenced_column_name from key_column_usage where table_name='table' and table_schema='schema') order by table_name; 

私は複数の環境でこれを実行しているんだけど、何らかの理由で私は1つの特定の環境に重複した結果を受けています。テーブルはすべて同じように設定されているので、この動作の原因はわかりません。

提案がありますか?

+1

これはInnoDBテーブルのためのものですか?参照された列が索引付けされていない場合、FK制約は最初に作成されていない可能性があります。 MySQLは1215でエラーになると私は信じています。索引はFK作成の前提条件です。 –

+0

はい、InnoDBテーブルです。奇妙な振る舞いは、多くの人の環境でしか見つからない...私はこの問題を理解していない。私は重複した記録を持っている。各索引は2回リストされます。 – user3299633

答えて

1

このmysqlサーバでは、おそらく同じ構造の2つのデータベース(スキーマ)があるか、複数列の外部キーがあります。確認する外部クエリの選択リストにtable_schemaフィールドを含めます。

クエリのwhere句に複数の単一列のin演算子を使用する代わりに、複数列のin演算子または内部結合を使用します。

+0

はい、予期しないスキーマが結果に偏りがあります。ありがとうございました! – user3299633

関連する問題