ホームページ >データベース >mysql チュートリアル >Django ORM を使用して重複フィールド値を持つ行を検索する方法
重複フィールド値を持つ行に対する Django クエリ
一意でないフィールドを持つ Django モデルがあるとします。そのフィールドに重複する値が少なくとも 1 つあるすべての行をモデルから選択する必要があります。
プレーン SQL アプローチ
考えられる解決策の 1 つは、プレーン SQL を使用することです。
SELECT * FROM literal WHERE name IN ( SELECT name FROM literal GROUP BY name HAVING COUNT(*) > 1 );
Django ORMアプローチ
Django の ORM を使用すると、values()、annotate()、order_by()、filter() の組み合わせで同じ結果を達成できます:
from django.db.models import Count dupes = Literal.objects.values('name') \ .annotate(Count('id')) \ .order_by() \ .filter(id__count__gt=1)
上記のコードは ValuesQuerySet を返すため、それを通常の QuerySet に変換してクエリセットとして使用する必要があります。 filter:
duplicates = Literal.objects.filter(name__in=[item['name'] for item in dupes])
このアプローチにより、重複する名前値を持つ行のみが選択されます。
以上がDjango ORM を使用して重複フィールド値を持つ行を検索する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。