[django/mysql] 使用distinct在mysql中查詢多條不重複記錄值的解決辦法

來源:互聯網
上載者:User

標籤:

前言:不廢話.,直接進入本文

本文:

如何使用distinct在mysql中查詢多條不重複記錄值?

首先,我們必須知道在django中模型執行查詢有兩種方法:

第一種,使用django給出的api,例如filter value distinct order_by等模型查詢api;

代碼:LOrder.objects.values(‘finish_time‘).distinct()

這裡應注意,原官方文檔中寫到:

樣本(第一個之後的樣本都只能在PostgreSQL 上工作):

>>> 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‘)

因為我使用的mysql資料庫,所以在distinct只能是第一中用法,或者可以這樣用

LOrder.objects.values(‘finish_time‘).distinct().order_by(‘finish_time‘)

第二種,使用原始SQL查詢

LOrder.objects.raw(‘SELECT DISTINCT id,finish_time FROM keywork_lorder group by finish_time‘)

上面直接使用mysql語句進行剔重,這裡需要特別注意的是:

一是原始SQL查詢只有一種欄位不可以被丟掉,官方文檔中這樣說道:

只有一種欄位不可以被省略——就是主鍵。 Django 使用主鍵來識別模型的執行個體,所以它在每次原始查詢中都必須包含。 如果你忘記包含主鍵的話,會拋出一個InvalidQuery異常。

意思是,如果你的sql語句是這樣的‘SELECT DISTINCT finish_time FROM keywork_lorder ‘,那麼將會報錯Raw query must include the primary key,就是id欄位不能被丟掉!

二是,這裡是原始mysql查詢語句,mysql去掉重複項要這樣寫:‘SELECT DISTINCT id,finish_time FROM keywork_lorder group by finish_time‘

[django/mysql] 使用distinct在mysql中查詢多條不重複記錄值的解決辦法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.