从Django中的MySQL表数据中选择不同的对

时间:2018-12-30 02:02:44

标签: python mysql django

我正在编写一个跟踪各种路线的物流应用程序,我想编写可以找到系统中所有路线的代码。

例如,在以下数据库中:

From    |      To | Time
------------------------
Seattle | Chicago | 12PM
Chicago | Seattle | 9 AM
Seattle | Chicago | 2PM
Chicago | Houston | 3PM

结果应为:

From    |      To
-----------------
Seattle | Chicago
Chicago | Houston 

基本上,方向无关紧要,只有配对才有意义。

我尝试通过djangos raw()函数使用join语句,但这会打印出所有路由乘以该对出现的次数,因此在上面的示例中它将打印出第一,第二和第三条记录3次每个以及最后一个记录。

fls = Route.objects.raw('SELECT * '
                         'FROM manager_route f1, flights_flight f2 '
'WHERE (f1.origin_id = f2.destination_id AND f1.destination_id = f2.origin_id)'
'OR (f1.origin_id = f2.origin_id AND f1.destination_id = f2.destination_id)')

1 个答案:

答案 0 :(得分:0)

搜索了一段时间后,我找到了解决方案:

fls = Route.objects.raw(
      'SELECT f1.* '
      'FROM manager_route f1 '
      'JOIN manager_route f2 '
      'ON f1.origin_id = f2.destination_id '
      'AND f1.destination_id = f2.origin_id '
      'AND f1.origin_id > f2.origin_id '
      'GROUP BY f1.origin_id, f1.destination_id'
)

将选择不同的城市对(据我所知,不会以任何排序的方式授予),需要使用GROUP BY来防止多次打印每个条目(否则会打印该对出现的次数)< / p>