2011-03-18 42 views
0

我需要進行MySQL查詢以顯示來自3個不同表的數據。MYSQL從3個或更多表中選擇

這是表1:

TABLE1

  • ID

  • 參考

  • 電子郵件

這是表2:

TABLE2:

  • ID

  • 電話

這是表3:

表3:

  • ID

  • 電話

我需要證明從表1,從表2或表3的所有數據,並且還手機,只有在表2或表3的ID與table1中參考字段中的數字相同。

有什麼建議嗎?謝謝!

回答

0
SELECT t1.*, t2.*, t3.* 
FROM table1 t1 JOIN table2 t2 
    ON t1.reference = t2.ID 
JOIN table3 t3 
    ON t1.reference = t3.ID 
+0

不工作,則返回0項,在表1中的參考將在表2表3或,而不是在時刻2頁的表。 – nmarti 2011-03-18 11:54:11

0

我不知道你是否能在MySQL做CASE語句中選擇,但你可以嘗試CASE語句作爲列並加入。這裏有一些sudo代碼。

SELECT t1.*, CASE t2.phone IS NOT t3.phone THEN t3.phone ELSE t2.phone END CASE as PhoneNumber 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON t1.reference = t2.id 
LEFT JOIN Table3 t3 ON t1.reference = t3.id 
2

是的,我有一個建議,修改你的結構。用不同的表格來保存不同的電話號碼是沒有意義的。 這裏的東西,你可以這樣做:

table1(-- you should give it a better name 
    id, 
    -- reference, -- not needed now... 
    name, 
    email 
); 

phone_numbers(
    id, 
    table1_id, 
    phone 
); 

現在你可以這樣做:

SELECT table1.*, GROUP_CONCAT(phone) 
FROM  table1 
LEFT JOIN phone_numbers ON table1.id = table1_id 
GROUP BY table1.id, name, email -- , whatever fields you have more on table1 
+0

您好,我簡化了表這個例子,但我使用diferents表,因爲是在diferent課程的字樣,並且數據到表中了,所以我不能修改的結構:/ – nmarti 2011-03-18 11:53:01

+0

@nmarti,好吧,但我無法猜測。從你的問題,我能看到的唯一的事情就是你的結構不應該是這樣,修改它會有幫助。而且我仍然相信有兩張表保存相同類型的數據沒有意義。 : -/ – acm 2011-03-18 11:56:15

1

你問一個電話從表2或表3。

因爲這2個表有相同的列,我們可以簡化這件事,想想這2個表作爲一個單一的一個,通過使用UNION子句:

select table1.*, v.phone 
    from table1 
    inner join (select * from table2 
       union 
      select * from table3) v on v.id = table1.reference 

編輯:更正表名的工會

+0

我認爲你應該使用'INNER JOIN',而不是'LEFT JOIN',因爲OP需求*顯示從表1的所有數據,並且還從表2或表3的電話,* ***只有*** * table2或table3中的id與table1 *中參考字段中的相同。 – 2011-03-18 12:51:52

+0

如果'table2'和'table3'包含具有相同'id'和不同電話號碼的行,此解決方案可以複製'table1'行。 – 2011-03-18 12:53:47

+0

@Andriy M同意,我忽略了這一點。編輯完成。謝謝! – 2011-03-18 12:54:44