sql - Django select_related() 用于使用模型和过滤器进行多连接查询

标签 sql mysql django django-models left-join

我有两个模型:工作和位置:

class Job(models.Model):
   title = models.CharField(max_length=20)
   company = models.CharField(max_length=20)
   location = ForeignKey('Location')

class Location(models.Model):
   country = models.CharField(max_length=20)
   state = models.CharField(max_length=20)
   city = models.CharField(max_length=20)
   latitude = models.FloatField(blank=True, default=0.0)
   longitude = models.FloatField(blank=True, default=0.0)
   big-city = ForeignKey('Location')

假设: 我的数据库中有 US/Calif/San-Fran、US/Calif/San_Jose、US/Calif/Alameda 和 US/Calif/Oakland。我还有经理/Ebay/San-Fran、会计/Amazon/San-Jose、Coop/IBM/Oakland 和主管/Dell/Alameda。

此外:San-Fran 将自己作为 big_city,而 San-Jose、Alameda 和 Oakland 将 San-Fran 作为他们的大城市。

现在,当有人搜索 San-Fran 的所有工作时,我会执行这样的查询。

Job.objects.filter(
location__country='US', 
location__state='Calif', 
location__city='San-Fran').selected_related('Location')

但是,我希望允许按地区搜索,用户可以在其中搜索旧金山地区的所有职位。这将是旧金山、奥克兰、阿拉米达和圣何塞的所有工作?

比如“显示所有位置被其他位置引用的职位”。

这会被称为双连接吗?

理想情况下,我会使用 lat-lon-radius(稍后练习),但现在我想知道如何使用双连接来完成。

谢谢。

Vn44ca

最佳答案

这是一个应该做你想做的查询:

Job.objects.filter(location__big_city__city='San-Fran', location__big_city__state='Calif', location__big_city__country='USA')

确实,Django 在运行此查询时在 Location 表上使用了两次连接:

SELECT "example_job"."id", "example_job"."title", "example_job"."company", "example_job"."location_id" FROM "example_job" INNER JOIN "example_location" ON ("example_job"."location_id" = "example_location"."id") INNER JOIN "example_location" T3 ON ("example_location"."big_city_id" = T3."id") WHERE (T3."country" = USA  AND T3."city" = San-Fran  AND T3."state" = Calif

关于sql - Django select_related() 用于使用模型和过滤器进行多连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/845903/

相关文章:

sql - 存储子查询结果以在整个查询中重复使用

sql - 是否可以将数据插入 MySQL View ?

mysql - Rails 中计算数据库中的词频

python - 带有 Django 的 matplotlib 在 print_figure 上失败,抛出 [Errno 2] 没有这样的文件或目录

python - django 更改默认运行服务器端口

python - 如何在 Django FileField/CharField/BooleanField/Upload 按钮上使用 Bootstrap

mysql - 搜索 MySQL 时忽略保存数据中的 HTML 标签

PHP - 将空格插入 MySQL

mysql - 如何返回Name及其特定ID?

php - 仅显示 mysql 中的唯一条目