如何將此SQL查詢轉換爲Django的ORM語句?選擇與Django不在一個表中的值
SELECT field1, field2, field3
FROM table1
WHERE field1 NOT IN
(SELECT 2_field1 FROM table2);
請幫忙! :)
PS
table1
和table2
不與ForeignKey
或ManyToMany
如何將此SQL查詢轉換爲Django的ORM語句?選擇與Django不在一個表中的值
SELECT field1, field2, field3
FROM table1
WHERE field1 NOT IN
(SELECT 2_field1 FROM table2);
請幫忙! :)
PS
table1
和table2
不與ForeignKey
或ManyToMany
使用兩個查詢集界定,如圖所示in the docs。
inner_qs = table2.objects.all()
results = table1.objects.exclude(field1__in=inner_qs)
感謝您的鏈接,從來沒有達到與API的頁面的這一部分:)但這種方法效率不高。原始SQL通過Django在我的情況下需要0.5秒(包括'fetchall()'),嵌套查詢的方法需要5秒 –
我經常發現原始sql對於像這樣的東西要快得多...特別是如果inner_qs很大......但是可能有一種方法可以像原始sql一樣執行相同的操作,如果有的話我還沒有找到它...... –
略有改進;其中,在某些情況下,使其中的差別: 'inner_qs = table2.objects.values_list( '字段1',扁= TRUE) 結果= table1.objects.exclude(field1__in = inner_qs)' 雖然,你應該使用QuerySet方法'raw()',如果你想更快地做你的查詢。 – trinchet
爲什麼不使用'.raw()'? –
在原始方法中使用該查詢會導致損壞的管道,如果您有太多記錄 –