SELECT user_name, item_name FROM users, items WHERE users.favor_item_id = items.item_id
という同等のクエリを実行したいと思います。これはuser_nameとitem_nameのペアを返します。データベースでは、1人のユーザーが複数のお気に入りアイテムを持つことができます。DjangoでデータベースJOINを実行中
私は、このSQLクエリと同等のDjangoクエリが何か不思議ですか?
私の最初の考えは、すべての(user、favor_item_id)ペアをUSERSからリストし、item_idがitem_idであるitem_nameを探すことです。しかし、それはO(NlogM)の複雑さを持つITEMテーブルをN回(Nはペア数)検索します(MはITEMの項目数です)。上記のSQLクエリを使用すると、複雑さはOです(N)。
django(または任意のORMシステム)でこれを行うより効率的な方法がありますか?
あなたの質問では、ユーザーの好きな項目は 'users'関係の列だと言いますが、まさに次の文で、ユーザーは複数のお気に入り項目を持つことができます。一人のユーザが 'users'テーブルに複数回出現することができない限り、それはどのように可能ですか? – SingleNegationElimination