簡體   English   中英

在子句中使用右連接和WHERE

[英]Using Right Join and WHERE IN Clause

考慮這些模型

class SearchableText(models.Model):
    searchable_text = models.TextField()

class SearchTerm(models.Model):
    searchabletext = models.ForeignKey(SearchableText, on_delete=models.CASCADE)
    term = models.CharField(max_length=100)

我想使用django orm編寫等效於此sql語句

Select SearchableText.* right join SearchTerm on SearchTerm.searchabletext=SearchableText.id where SearchTerm.term in ("term 1","term 2","term 3")

我也想根據匹配項的數量對結果進行排序,但是我想它可能會引起另一個問題。

您可以使用Q功能。 我認為這可能是您要查詢的查詢:

from django.db.models import Q, F

SearchableText.objects.filter(Q(id=F('searchterm__searchabletext')), searchterm__term__in=['term1', 'term2', 'term3'])

生成的SQL查詢是這樣的:

SELECT app_searchabletext.* FROM app_searchabletext INNER JOIN app_searchterm ON (app_searchabletext.id = app_searchterm.searchabletext_id) WHERE (app_searchabletext.id = (app_searchterm.searchabletext_id) AND app_searchterm.term IN (term1, term2, term3))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM