2013-11-22 50 views
0

我对MySQL很新颖,而且我正在努力解决这个问题。我有两个不同的表格(T1和T2),而T2则获得了T1中的所有元素,还有一些额外的元素。在多个条件下在MySQL上连接两个表

我试图从T2获取变量 “公司” 从T1的所有值,如:

SELECT 
T2.company as company, 
T1.route as route, 
T1.departure_time, 
T1.arrival_time 

当某些条件得到满足,如:

T1.route LIKE(CONCAT(T2.airport1,T2.airport2)) AND 
T1.departure_time = T2.departure_time AND 
T1.arrival_time = T2.arrival_time 

如何我可以这样做吗?对于基本问题抱歉,但我现在真的很绝望。非常感谢。

OBS:是的,坏的是,这两个表从不同的来源来了,因此,有加入其中没有唯一的键值,所以这就是为什么我在与所有这些条件的挣扎......

+1

桌子上的钥匙是什么? –

回答

0

你试过这个吗?

SELECT 
    T2.company as company, 
    T1.route as route, 
    T1.departure_time, 
    T1.arrival_time 
from 
    t1,t2 
where 
    T1.route LIKE(CONCAT(T2.airport1,T2.airport2)) AND 
    T1.departure_time = T2.departure_time AND 
    T1.arrival_time = T2.arrival_time 
+0

是的,我也试过,但它也花了很长时间,我收到服务器超时...两个表是巨大的,每个8,5万条目 – rodrigoburg

+0

似乎这个结构有点缺陷。你应该重新组织表格。添加适当的主键/外键和索引。 –

0

您可以在ON子句中添加条件,像这样

SELECT Fields 
FROM T1 
LEFT JOIN T2 
ON T1.company=T2.company 
AND T1.route LIKE(CONCAT(T2.airport1,T1.airport2)) 
AND T1.departure_time = T2.departure_time 
AND T1.arrival_time = T2.arrival_time 

是,对于刚刚担任的是确保该行确实在连接目的的条件,条件,以确定哪些要选择的行将在WHERE子句之后。考虑下面的线路在其他线路之后立即走

WHERE T1.company='airFoo' 
+0

我实际上已经尝试过使用LEFT JOIN,就像你所建议的那样,但是我花了很长时间才得到超时响应,所以我得出结论说我一定是做错了什么事情了...... – rodrigoburg

+0

你能发布实际使用的查询吗?也一定要正确地索引使用的字段。如果你有大表,这可能会减慢查询速度 –