Memilih Baris dengan Nilai Medan Pendua dalam Django
Pertimbangkan model Django dengan medan nama bukan unik yang membenarkan nilai pendua. Untuk memilih semua baris dengan sekurang-kurangnya satu nilai pendua medan nama, seseorang boleh meneroka kedua-dua pendekatan ORM dan SQL.
Pendekatan ORM Django
Menggunakan keupayaan pengagregatan Django, seseorang boleh mencapai tugas ini dengan ungkapan ORM berikut:
from django.db.models import Count Literal.objects.values('name') .annotate(Count('id')) .order_by() .filter(id__count__gt=1)
Ini ungkapan mengumpulkan contoh model mengikut nama, mengira bilangan kejadian setiap nama dan menapis hasil untuk memasukkan hanya nama dengan tika pendua.
Pendekatan Django ORM yang Dipertingkatkan
Walaupun pendekatan ORM sebelumnya menyediakan fungsi yang diperlukan, ia hanya mengembalikan nama dan maklumat kiraan. Untuk mendapatkan rekod sebenar, seseorang boleh membina QuerySet biasa berdasarkan nama pendua yang ditemui:
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])
SQL Approach
Bagi mereka yang lebih suka penyelesaian SQL tulen, pertanyaan berikut akan menghasilkan hasil yang diingini:
select * from literal where name IN ( select name from literal group by name having count((name)) > 1 );
Pertanyaan ini menggunakan subquery untuk mencari nama pendua dan kemudian memilih semua baris daripada jadual utama yang mana nama itu sepadan dengan salah satu pendua.
Atas ialah kandungan terperinci Bagaimana untuk Memilih Baris dengan Nilai Medan Pendua dalam Django Menggunakan ORM dan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!