2014-03-31 73 views
0

從3個MySQL表中選擇數據時遇到問題。MySQL從3個表中選擇多個條件

我想說明以下欄目:

SELECT table1.id as UserID, table1.gender, table1.land, table1.dob, table1.category_id, table1.is_participant, table2.* 

我想使用的條件是:

WHERE table1.id = table2.user_id 
OR table3.id = table2.responder_id 

所以我試圖用整個查詢是:

SELECT table1.id as UserID, table1.gender, table1.land, table1.dob, table1.category_id, table1.is_participant, table2.* 
FROM table1, table2, table3 
WHERE table1.id = table2.user_id 
OR table3.id = table2.responder_id 

這個查詢有什麼問題?出於某種原因,每次我詢問這個​​查詢時,這個過程都不​​會結束。

感謝您的幫助!

+0

您可以添加sqlfiddle.com中的表和數據,並在您的問題的預期結果。 –

+0

抱歉,我們不能,這是屬於我工作的公司的私人信息 – Alberto

+2

@AhhikChakraborty表示示例數據。不是實際的數據:) –

回答

1

我建議使用聯接明確:

FROM table2 
    LEFT JOIN table1 ON table1.id = table2.user_id 
    LEFT JOIN table3 ON table3.id = table2.responder_id 
WHERE table1.id IS NOT NULL OR table3.id IS NOT NULL; 

既然你有OR操作,你需要在這裏使用LEFT JOIN:這樣你就會有記錄的所有表格,然後在其上執行WHERE ... OR

教程上加入here

1

從不結束意味着查詢合成器是正確的並且被引擎正確解析,但執行速度很慢。你在該表中有多少數據?

查看該表上的索引和數據結構優化。然而嘗試使用這樣一個JOIN:

SELECT table1.id as UserID, table1.gender, table1.land, table1.dob, table1.category_id, table1.is_participant, table2.* 
FROM table1 
JOIN table2 ON table1.id = table2.user_id 
JOIN table3 ON table3.id = table2.responder_id 
0

使用此代碼:

SELECT 
table1.id as UserID, 
table1.gender, 
table1.land, 
table1.dob, 
table1.category_id, 
table1.is_participant, 
table2.*, 
table3.* // you not mention the table3 field, i just mention the all fields 
FROM table1 
join table2 
on table1.id = table2.user_id 
join table3 
on table3.id = table2.responder_id 

注:我有一個疑問,您使用的table3但沒有提及field name

+0

看看我的答案,同時,有一個疑問,你使用'table3'但沒有提及'field name'。 – jmail

0

你的問題含糊不清,首先告訴你想要達到的目標。我認爲你的查詢是錯誤的,順便說一下,由於你添加了OR條件,它會花費很多時間。

當您編寫FROM table1,table2,table3時,它意味着MySql必須創建一個臨時表,其中將包含所有三個表中所有行的所有排列。這就是爲什麼通過添加適當的WHERE條件來限制MySql必須做出的排列次數。

我認爲你需要添加AND條件而不是OR。

也請確保 如果您想要更快的結果,table1.id,table2.user_id,table3.id和table2.responder_id將被編入索引。