2009-06-29 12 views
4

Mysql(InnoDB)で逆ルックアップを使用することが可能かどうか疑問です。逆参照のためにInnoDBテーブルにMysqlの外部キーを使用することはできますか?

理由 - 私はデータベースからXMLのような構造を読みたい( "レイヤー"ごとに1つのテーブルを使用する)が、これを動的に行うことができる。私は新しいテーブルを追加し、FK制約を設定することによってxml構造体を更新できるようにしたい。

明確にするには、idとparent_idを持つテーブル "parent"と他の2つのカラム(k1とk2)があるとします。 XMLは(IDを省略)のようになります。

<parent> 
<k1>v1</k1> 
<k2>v2</k2> 
</parent> 

今、私たちは、外部キー参照のPARENT_IDと一つの他の列(CK1)と子テーブルを追加します。同じクエリ(後でいくつかの処理を行う)は、次のようになります。

<parent> 
<k1>v1</k1> 
<k2>v2</k2> 
<child> 
    <ck1>cv1</ck1> 
</child> 
</parent> 

これは可能ですか? "SELECT * FROM parent_table"に何らかのパラメータを設定して、FKで返された子行を返すようにしますか?

多くの感謝! /ビクター

答えて

1

多くを読んだ後、一つの選択肢のようなものを使用することです:これは、子供を持つすべてのテーブルを与える

SELECT 
    referenced_table_name parent, 
    table_name child, 
FROM 
    information_schema.KEY_COLUMN_USAGE 
WHERE 
    referenced_table_name IS NOT NULL 

を。リクエストされた親に返すだけのフィルタリングはもちろん簡単です。しかし、欠点として、上記の余分なクエリ(および処理)が必要になります。また

+0

) - 実際の選択クエリを実行する際に別の問題がある。

私はまだ「より良い」解を得るのが大好きだが、これは、少なくともスタートかもしれません。通常の "SELECT * FROM parent_table、child_table"は、FKのことに関係なく2つのテーブルを結合します(WHERE child_table.fk_constraint_col = parent_table.idまたはsimilairを明示的に指定しています)。 select文がFKを明示的に指定せずに考慮に入れることは可能ですか? ありがとう! – Victor

関連する問題