2014-02-05 70 views
0

我有一个不太理想的数据库结构,我不得不使用。表1包含2个ID(让我们称它们为id1,id2)。这些Id链接到另一个表Table2中的2行。我想获取Table1的一些列,并使用id1和id2从Table2中获取列。我真的必须两次连接到同一个表以连接到不同的行吗?还是有另一种更有效的方法来做到这一点?我的查询超过20秒20秒。复杂的MySQL查询永远执行

SELECT t1.id1, t1.id2, t2.name, t3.name 
FROM Table1 t1, Table2 t2, Table2 t3 
WHERE t1.id1 = t2.id AND t1.id2 = t3.id AND t1.index = 2 
+0

当你说“20行“是表的大小还是结果集的大小?如果是后者,桌子有多大?他们的结构是什么?此外,您需要学习ANSI标准连接语法,并使用条件的'on'子句。 'join'的where子句是如此过时。 –

+0

我的代码如下所示:http://pastebin.com/1uZnRuJw它返回有效数据,但在这些表中大约1000行总共需要30秒以上。 –

回答

0

没有测试,但它应该是可以使用连接:

SELECT t1.id1, t1.id2, t2.name FROM 
FROM Table1 t1 
JOIN Table2 t2 
ON t1.id1 = t2.id OR t1.id2 = t2.id 
WHERE t1.index = 2 
0

如果你真的需要这种Many-to-Many关系,请尝试JOIN

SELECT t2.id AS t2_id, 
     t3.id AS t3_id, 
     t2.name AS t2_name, 
     t3.name AS t3_name 
    FROM Table1  t1 
    JOIN Table2  t2 
    ON t1.id1 = t2.id 
    JOIN Table3  t3 
    ON t1.id2 = t3.id 
WHERE t1.index = 2