我需要進行MySQL查詢以顯示來自3個不同表的數據。MYSQL從3個或更多表中選擇
這是表1:
TABLE1
ID
參考
名
電子郵件
這是表2:
TABLE2:
ID
電話
這是表3:
表3:
ID
電話
我需要證明從表1,從表2或表3的所有數據,並且還手機,只有在表2或表3的ID與table1中參考字段中的數字相同。
有什麼建議嗎?謝謝!
我需要進行MySQL查詢以顯示來自3個不同表的數據。MYSQL從3個或更多表中選擇
這是表1:
TABLE1
ID
參考
名
電子郵件
這是表2:
TABLE2:
ID
電話
這是表3:
表3:
ID
電話
我需要證明從表1,從表2或表3的所有數據,並且還手機,只有在表2或表3的ID與table1中參考字段中的數字相同。
有什麼建議嗎?謝謝!
你可以嘗試像
SELECT t1.*
COALESCE(t2.phone,t3.phone) phone
FROM Table1 t1 LEFT JOIN
Table2 t2 ON t1.reference = t2.id LEFT JOIN
Table3 t3 ON t1.reference = t3.id
看一看COALESCE(value,...)也許SQL SERVER – Introduction to JOINs – Basic of JOINs
SELECT t1.*, t2.*, t3.*
FROM table1 t1 JOIN table2 t2
ON t1.reference = t2.ID
JOIN table3 t3
ON t1.reference = t3.ID
我不知道你是否能在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
是的,我有一個建議,修改你的結構。用不同的表格來保存不同的電話號碼是沒有意義的。 這裏的東西,你可以這樣做:
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
你問一個電話從表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
編輯:更正表名的工會
我認爲你應該使用'INNER JOIN',而不是'LEFT JOIN',因爲OP需求*顯示從表1的所有數據,並且還從表2或表3的電話,* ***只有*** * table2或table3中的id與table1 *中參考字段中的相同。 – 2011-03-18 12:51:52
如果'table2'和'table3'包含具有相同'id'和不同電話號碼的行,此解決方案可以複製'table1'行。 – 2011-03-18 12:53:47
@Andriy M同意,我忽略了這一點。編輯完成。謝謝! – 2011-03-18 12:54:44
不工作,則返回0項,在表1中的參考將在表2表3或,而不是在時刻2頁的表。 – nmarti 2011-03-18 11:54:11