2014-02-05 96 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