【问题标题】:Using Right Join and WHERE IN Clause使用右连接和 WHERE IN 子句
【发布时间】:2016-10-29 15:27:37
【问题描述】:

考虑这些模型

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

我还想根据匹配项的数量对结果进行排序,但我想它会赋予另一个问题。

【问题讨论】:

    标签: python mysql sql django


    【解决方案1】:

    您可以使用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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 2018-01-20
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多