我正在与航空公司,机场及其路线合作 我有两个表路线和补充。 通过搜索共享节点的路段来构建补码表。 (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
答案 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