-2

すべてのテーブルに存在する ID を使用してデータをリンクし、3 つのテーブルからレコードを取得する最も効率的な方法は何ですか?

  • 最初のテーブル: id は主キーではありません。多くのレコードが同じ id 値を持っています。このテーブルの主キーは「primary_id」です

  • 2 番目のテーブル: id は主キーです

  • 3 番目のテーブル: id は主キーです

したがって、最初のテーブルから「id」の他の 2 つのテーブルへの多対 1 の関係があります。そしてもちろん、2 番目から 3 番目のテーブルは "id" で 1 対 1 の関係を持ちます。"id" はどちらも主キーだからです。

最初のテーブルから 5 つのレコードを選択したい (最初のテーブルprimary_id asc で並べ替える -テーブル間で共有されているidではない) が、他の 2 つのテーブルからのレコードも必要です。

私は取得する必要があります

table1.primary_id | table1.id | table1.some_data | table2.some_data | table3.some_data
--------------------------------------------------------------------------------------
                1 |        22 |          oranges |     fruit seller |          company
                4 |        22 |      watermelons |     fruit seller |          company
               13 |        22 |          bananas |     fruit seller |          company
               15 |        22 |            pears |     fruit seller |          company
               19 |        22 |            beans |     fruit seller |          company

おわかりのように、id が主キーである table2 では、id=22 に some_data=fruit Seller があり、id が主キーである table3 では、id=22 に some_data=company があります。

テーブル 1 の primary_id で最初の 5 つのレコードを取得し、他の 2 つのテーブルからもレコードを取得するには、何を使用すればよいでしょうか?

ジョイン?サブクエリ?私の懸念はパフォーマンスについてです。

4

1 に答える 1

0

試す:

select t1.primary_id, t1.id, t1.some_data, t2.some_data, t3.some_data
from table2 t2
join table3 t3 on t2.id = t3.id
cross join (select * from table1 where id = 22 order by primary_id limit 5) t1
where t2.id = 22

table1.id にインデックスがあることを確認します。id、primary_id に (この順序で) インデックスがあると、クエリのパフォーマンスが向上する可能性があります。

于 2013-05-11T15:19:51.360 に答える