首頁 >資料庫 >mysql教程 >如何使用 ORM 和 SQL 在 Django 中選擇具有重複欄位值的行?

如何使用 ORM 和 SQL 在 Django 中選擇具有重複欄位值的行?

DDD
DDD原創
2024-12-26 08:50:10810瀏覽

How to Select Rows with Duplicate Field Values in Django Using ORM and SQL?

在 Django 中選擇具有重複欄位值的行

考慮一個具有允許重複值的非唯一名稱欄位的 Django 模型。要選擇名稱欄位中至少有一個重複值的所有行,可以探索 ORM 和 SQL 方法。

Django ORM 方法

利用Django 的聚合功能,可以使用下列ORM 表達式來完成此任務:

from django.db.models import Count
Literal.objects.values('name')
               .annotate(Count('id')) 
               .order_by()
               .filter(id__count__gt=1)

此表達式來完成此任務:

此表達式來完成此任務:

此表達式來完成此任務:

dupes = Literal.objects.values('name')
                       .annotate(Count('id'))
                       .order_by()
                       .filter(id__count__gt=1)
Literal.objects.filter(name__in=[item['name'] for item in dupes])

此運算式按名稱、計數對模型實例進行分組每個名稱出現的次數,並過濾結果以僅包含具有重複實例的名稱。

增強的 Django ORM 方法

select * from literal where name IN (
    select name from literal group by name having count((name)) > 1
);
雖然之前的 ORM 方法提供了必要的功能,它只傳回名稱和計數資訊。要取得實際記錄,可以根據找到的重複名稱建構一個常規查詢集:

SQL 方法對於那些喜歡純 SQL解決方案的人,以下查詢將產生所需的結果:此查詢利用子查詢來查找重複的名稱,然後從主表中選擇名稱與重複項之一匹配的所有行。

以上是如何使用 ORM 和 SQL 在 Django 中選擇具有重複欄位值的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn