Djangoはdistinctを解決して重複データの問題を取り除くことができません。


distinctを使ってmysqlの中で複数の記録値を重複しない解決方法を調べます。
どのようにdistinctを使ってmysqlの中で複数のレコードを調べますか?
時々distinctでquerysetの重複項目を削除したいです。djangoの文章を見てこう言います。

>>> Author.objects.distinct()
[...]
 
>>> Entry.objects.order_by('pub_date').distinct('pub_date')
[...]
 
>>> Entry.objects.order_by('blog').distinct('blog')
[...]
 
>>> Entry.objects.order_by('author', 'pub_date').distinct('author', 'pub_date')
[...]
 
>>> Entry.objects.order_by('blog__name', 'mod_date').distinct('blog__name', 'mod_date')
[...]
 
>>> Entry.objects.order_by('author', 'pub_date').distinct('author')
[...]
Note
djangoドキュメントで特別に紹介されました。distinctの列は必ずorder(u)を先にします。byそして第一項にあります。
When you specify field names,you must provide an order.by() in the QuerySet,and the fields in order.by() must start with the fields in distinct()は、in the same order.
For example、 SELECT DISTINCT オン (a) gives you the first row for each value in column a.If you don't specify an order,you'll get some arbitrary row.
完全にそのまま作成して、使っているmysqlデータベースに最後にこのような警告が現れました。
 ライセNotImplementError('DISTINCT ON fields is not supported by this database backend')
NotImplementError:DISTINCT ON fields is not supported by this database backend
データベースがサポートされていないと教えてください。
もちろんいいです。

items = []
for item in query_set:
  if item not in items:
    items.append(item)
まず、djangoでモデルによるクエリーの実行には2つの方法があることを知らなければなりません。
第一に、djangoを使用して与えられたapi、例えばfilter value distinct order_byなどのモデルクエリアプリ;
コード:LOrder.objects.values('finish_time').distinct()ここで注意すべきです。元の公式文書には次のように書かれています。
例(最初の後の例は、PostgreSQLでのみ動作可能):
>>Author.object.distinct()>Entry.object.order_by('pub_]date.[distinct].distinct('pub_]date')>>Entry.object.orderby('blog').distinct('blog')>>Entry.object.order_by('author','pb_date').distinct('author','pub_date')>>Entry.object.orderby(''blog__u u')name,'mod_ダテ..distinct('blog_u u_u')name,'mod_date')>>Entry.object.orderby('author','pb_date').distinct('author')
私が使っているmysqlデータベースですので、distinctでは第一の中でしか使えません。あるいはこのように使ってもいいです。
LOrder.objects.values('finish_time..distinct.order_by(''finish')時間
第二に、元のSQLクエリを使用します。
LOrder.object s.raw('SELECT DISTINCT id,finish_time FROM keywork_lorder group by finish_時間
上で直接mysql文を使って重みを取りますが、ここで特に注意しなければなりません。
一つは元のSQLクエリは一つのフィールドだけが失われてはいけません。公式文書ではこう言います。
一つのフィールドだけが省略されてはいけません。つまり、メインキーです。Djangoはメインキーを使用してモデルのインスタンスを識別するので、元のクエリごとに含まれる必要があります。キーを含むことを忘れたら、InvalidQueryを投げます。
あなたのsql文がこのような「SELECT DISTINCT finish」という意味です。time FROM keywork_lorder'はRaw query must include the primary keyを間違えます。idフィールドは捨てられません。
第二に、ここは元のmysql検索語句で、mysqlは重複項目を取り除いてこのように書きます。time FROM keywork_lorder group by finish_時間
追加:Dispinctを使って重複データを除去する
distinctは、クエリーで列を返すための一意の異なる値(すなわち繰り返します)を使用して、単列または複数列をサポートします。
実際のアプリケーションでは、表の中のある列に重複値が含まれているのが一般的で、employee従業員テーブルのdept部門のようです。
データを検索する際に、ある列のすべての異なる値を取得したい場合は、distinctを使用することができます。
distinct文法
select【distinct】column_name 1,column_name 2
fromテーブルname
以下から操作を開始します

       
create table footprint(
	id int not null auto_increment primary key,
	username varchar(30) comment '   ',
	city varchar(30) comment '  ',
	visit_date varchar(10) comment '    '
);
      
insert into footprint(username, city, visit_date) values('mofei', '  ', '2019-12-05');
insert into footprint(username, city, visit_date) values('mofei', '  ', '2020-01-15');
insert into footprint(username, city, visit_date) values('mofei', '  ', '2018-10-10');
insert into footprint(username, city, visit_date) values('zhangsan', '  ', '2020-01-01');
insert into footprint(username, city, visit_date) values('zhangsan', '  ', '2020-02-02');
insert into footprint(username, city, visit_date) values('lisi', '  ', '2016-12-20');

           
mysql> select distinct city from footprint;
 group by     ,   distinct          
mysql> select city from footprint group by city;


            
mysql> select distinct username from footprint;

dictinct        ,             
以上の内容はマーフィーの補充です。
追加知識:DispinctとGroup byは重複フィールド記録を削除する。
繰り返し記録には2つの意味があります。1つは完全に重複した記録、すなわちすべてのフィールドが重複した記録です。
第二に、部分的なキーフィールドの重複記録、例えば、Nameフィールドの重複であり、他のフィールドは必ずしも繰り返したり、繰り返したりしなくても無視できます。
1、最初の繰り返しについては、比較的解決しやすく、使用する
select distinct*from table Name
重複記録なしの結果集が得られます。
この表が重複した記録を削除する必要がある場合(重複記録は1つ残しておく)、以下の方法で削除できます。

select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
このような重複が発生した原因は表の設計が不備で発生したためで、唯一の索引列を追加すれば解決できます。
2、このような重複問題は通常重複記録の中の第一条記録を保留することを要求します。操作方法は以下の通りです。
重複したフィールドがあると仮定して、Addressはこの二つのフィールドの唯一の結果セットを得ることを要求します。

select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name
select * from #Tmp where autoID in(select autoID from #tmp2)
最後のselectはNameを得ました。Addressは重複しない結果集です。(但し、autIDフィールドが一つ多くなりました。実際に書く時はselect子文に書いてこの列を省きます。)
他のデータベースはシーケンスを使用できます。
create sequence seq 1;
select seq 1.nextval as atoID、*into芫Tmp from table Name
zuono:上記の例により必要な語句はSELECT MAX(id)AS ID、Prodou_です。id,FinalDye FROM anwell.tblDBDdata GROUT BY Prodou_ID、FinalDye ORDER BY idは、これまでDistinctで指定フィールドを取得したいと思っていましたが、重複しない記録はエラーです。
以上のDjangoはdistinctを解決して重複データの問題を取り除くことができません。つまり、小編集は皆さんに全部の内容を共有しています。