SQL查询问题

时间:2011-03-31 20:04:39

标签: mysql sql

我正在与航空公司,机场及其路线合作 我有两个表路线和补充。 通过搜索共享节点的路段来构建补码表。 (B是路线A-> B-> C中的节点)

我想构建补码表,以便通过节点到达的目的地是唯一的。换句话说,航空公司不应该自己到达目的地C.

在构建补充表后,我尝试了:

SELECT t1.*
FROM complement AS t1
   , routes AS t2
WHERE t1.airline_id1 = t2.airline_id
  AND t1.source = t2.source
  AND t1.destination != t2.destination

* airline_id1指的是第一条服务于路线A至B的航空公司。(在A-> B-> C路线中)
原始表有大约650,000条记录,但我通过此查询获得了超过1000万条记录。我确信我做错了。

任何帮助将不胜感激!

编辑:补码表中的某些字段是airline_id1,airline_id2,source_airport,node,destination_airport

1 个答案:

答案 0 :(得分:2)

complement表格是否有airline_id2字段(对于行程的B->C部分)?

这将给出所有“补充”路线,其中两部分由不同的航空公司完成:

SELECT c.*
FROM complement AS c
WHERE c.airline_id1 != c.airline_id2

或许你想要:

(对于没有从A到C的“直接”路线的航空公司,从A到C的所有“补充”路线。)

SELECT c.*
FROM complement AS c
  LEFT JOIN routes AS r
    ON c.source_airport = r.source_airport
      AND c.destination_airport = r.destination_airport
      AND c.airline_id1 = r.airline_id
WHERE r.id IS NULL