2014-12-29 101 views
0

我有三個表的MySQL查詢有問題。我想搜索一個名字,並獲得所有(甚至更好,只有第一個)電話號碼和電子郵件。這裏是我的表:MySQL:從三個表中選擇?

Table 1, contact 
========== 
id | name 
========== 
1 | stefan 
2 | michael 
3 | andy 
4 | bob 

Table 2, phone 
============================== 
id | contact_id | phonenumber 
============================== 
1 | 1   | +1 434 434232 
2 | 1   | +1 434 24234 
3 | 2   | +1 89234 
4 | 4   | +1 345345 
5 | 4   | +1 434 7567567 

Table 3, email 
=============================== 
id | contact_id | emailaddress 
=============================== 
1 | 1   | [email protected] 
2 | 1   | [email protected] 
3 | 1   | [email protected] 
4 | 4   | [email protected] 
5 | 2   | [email protected] 

,這是我的查詢,其接縫送MySQL來必殺技:

SELECT c.name, p.phonenumber, e.emailaddress 
FROM contact AS c 
JOIN phonenumber AS p ON c.id = p.contact_id 
JOIN email AS e ON c.id = e.contact_id 
WHERE c.name = 'michael' 

當我只有一個加入這個工作正常,如:

SELECT c.name, p.phonenumber 
FROM contact AS c 
JOIN phonenumber AS p ON c.id = p.contact_id 
WHERE c.name = 'michael' 

有什麼建議嗎?

感謝

邁克

+4

您別名電子郵件爲 'A',但你在e.contact_id中使用'e'。 –

+0

對不起,這是一個錯字,我改變了它,但總體上存在問題。 – MichaelFromMars

+0

你是什麼意思「發送MySQL到涅」「?你有錯誤嗎?是否需要永久執行?你沒有得到任何結果?請具體說明。 –

回答

0

嘗試

SELECT c.name, p.phonenumber, e.emailaddress 
FROM contact c 
INNER JOIN phone p ON c.id = p.contact_id 
INNER JOIN email e ON p.contact_id = e.contact_id 
WHERE c.name = 'michael' 
+0

嗨伊曼紐爾,非常感謝你,這是我的錯,你的嘗試完美。如果聯繫人有多個電話號碼或電子郵件地址,您是否還有一個想法,如何獲得一個結果?再次感謝。 – MichaelFromMars

+0

在末尾添加LIMIT 0,1 – ptrk

+0

這會爲您提供符合標準的所有行的第一行。然而,我可能誤解了「一個結果」。 – ptrk

0

每接觸得到的只是一個結果,你可能會在一個位非正統的方式使用聚合。我修改@Emanuel Saringan的查詢:

SELECT c.name, min(p.phonenumber), min(e.emailaddress) 
FROM contact c 
left JOIN phone p ON c.id = p.contact_id 
left JOIN emailaddress e ON c.id = e.contact_id 
WHERE c.name = 'michael' 
GROUP BY c.id 

看到它在這裏工作: http://sqlfiddle.com/#!2/6a8700/2

+0

嗨ptrk,謝謝,但這再次讓我一個MySQL超時,沒有結果,嗯? – MichaelFromMars

+0

請現在測試,也與sqlFiddle比較。注意我用左連接替換了INNER JOINS,這樣你就可以獲得有電話或電子郵件的聯繫人(不一定是兩者)。 – ptrk

1

試試這個:

SELECT c.name, p.phonenumber, e.emailaddress 
FROM name_of_your_schema.contact AS c 
JOIN name_of_your_schema.phone AS p ON c.id = p.contact_id 
JOIN name_of_your_schema.email AS e ON c.id = e.contact_id 
WHERE c.name = 'stefan' 
LIMIT 1; 

湯姆L.

+0

嗨,湯姆,謝謝,我也會檢查一下,但現在我上牀睡覺,現在是午夜。保重,邁克 – MichaelFromMars