2014-11-23 76 views
0

我用下面的查询来获取数据,但现在我需要再次加入同一个表4次或更多时间,所以我想找到替代方式。Mysql alternativ加入多个时间表

SELECT t1.id,t1.name,t2.name as name2,t3.name as name3,t4.name as name4.... 
FROM first_table as t1 
left join second_table as t2 on t2.code = t1.f_name, 
left join second_table as t3 on t3.code = t1.l_name, 
left join second_table as t4 on t4.code = t1.a_name, 
....... 
..... 
..... 

和许多联接,所以我怎么能以更好的方式(高效)获得相同的结果?

+0

为什么你需要在同一个表多次参加?它可能只能使用一个连接,但它取决于上下文... – fthiella 2014-11-23 11:18:43

+0

,因为我有第一个表中有多个列与第二个表的相同列有关系,例如t1.f_name是123和相关的真实姓名f_name = 123位于second_table的名称列中,并且对于l_name和a_name的first_table的名称为 – jones 2014-11-23 11:24:35

+0

,请搜索如何在MySQL中执行递归查询。有几种方法,没有任何真正微不足道的。如果卡住了,请回来寻求帮助。 – koriander 2014-11-23 11:34:47

回答

2

你可以用这个查询尝试:

SELECT 
    t1.id, 
    t1.name, 
    MAX(CASE WHEN t2.code = t1.f_name THEN t2.name END) AS name2, 
    MAX(CASE WHEN t2.code = t1.l_name THEN t2.name END) AS name3, 
    MAX(CASE WHEN t2.code = t1.a_name THEN t2.name END) AS name4 
FORM 
    first_table AS t1 LEFT JOIN second_table AS t2 
    ON t2.code IN (t1.f_name, t1.l_name, t1.a_name) 
GROUP BY 
    t1.id, 
    t1.name