次のような3つのテーブルがあります。
m(id INT, name TEXT)
tn(id INT, name TEXT, valueid INT)
tv(valueid INT, name TEXT)
m テーブルには一意のエントリのみがあります。「tn」テーブルには、m.id フィールドに一致する値が少なくとも 1 つ含まれます。通常は多数あります。最後に、「tv」テーブルには、valueid フィールドを使用して tn テーブルに関連付けられた多くの値があります。
その結果、m テーブルから値を選択できるようになり、m.id = tn.id のように「tn」テーブルで対応する値を見つけることができます。最後に、tn.valueid フィールドに関連付けられているすべての tv 値を取得する必要があります。
出力は次のようになります
foo host bar
foo host foobar
bar host1 foo
ここで、列 1 は m.name から、列 2 は tn.name から、列 3 は tv.names からです。tv.names のエントリごとに、クエリの新しい出力行が生成されます。
アップデート:
これまでのところ、m の一意の名前とそれに関連付けられている tn.name の値を選択できる最初のクエリを作成できました。
select m.name, tn.name from m, tn where m.id = tn.id and m.id = 128;
これを拡張して 3 番目のテーブルを含め、他の 2 つのテーブルの valueid フィールドによる選択を制限する必要があります。
ありがとう。