2017-04-27 26 views
-1

您能幫我構建一個SQL查詢以獲取2表中的數據列表,如果第二個表上存在數據,則應顯示來自該表的數據,表1MySQL:如果存在則從其他表中選擇,否則從當前表中選擇

表1:

ID | NAME | AGE 
------------------ 
1 | John | 20 
2 | Daniel | 30 
3 | Abraham | 30 
4 | Donald | 25 

表2:

ID | NAME | AGE 
------------------ 
1 | John | 23 
2 | Donald | 24 

期望的結果:從表2約翰和唐納德 「AGE」 獲取數據,並從表1

ID | NAME | AGE 
------------------ 
1 | John | 23 
2 | Daniel | 30 
3 | Abraham | 30 
4 | Donald | 24 

其餘見http://www.sqlfiddle.com/#!9/9539b0

+1

的可能的複製[第二SELECT查詢,如果第一個SELECT返回0行(http://stackoverflow.com/questions/27366107/second-select-query-if-first -select-returns-0-rows) – Pyromonk

+0

你是使用'id'還是'name'來標識應該匹配的數據? – fubar

+0

@farar它應該使用ID。 –

回答

1

記錄的外連接,併爲年齡測試NULL值。就像這樣:

SELECT c.id 
    , c.name 
    , IFNULL(r.age,c.age) AS age 
    FROM Clients c 
    LEFT 
    JOIN Records r 
    ON r.name = c.name 
ORDER BY c.id 

http://www.sqlfiddle.com/#!9/9539b0/4

+0

它的工作就像一個魅力,它節省了大量的數據處理和代碼,謝謝@ spencer7593 –

2

表使用自動增量的ID加入

SELECT t1.id, t1.name, IF(t2.id, t2.age, t1.age) AS age 
FROM Clients AS t1 
LEFT JOIN Records AS t2 ON (t1.id = t2.id) 

或使用名稱加入的表格

SELECT t1.id, t1.name, IF(t2.name, t2.age, t1.age) AS age 
FROM Clients AS t1 
LEFT JOIN Records AS t2 ON (t1.name = t2.name) 
+0

我編輯了第一個查詢和它的結果如預期'SELECT t1.id,t1.name,IF(t2.name = t1。名稱,t2.age,t1.age)AS年齡 從客戶端AS t1 LEFT JOIN記錄AS t2開(t1.name = t2.name)' –

+0

檢查'IF'中的相等性是沒有必要的。這已經由'JOIN'處理了。 – fubar

+0

「第一個查詢」給出無效結果John \t 23,Daniel 24,Abraham \t 30和Donald \t 25,並且「第二查詢」給出與表1相同的結果,在該查詢結果[http://www.sqlfiddle。 com /#!9/9539b0/1] –

相關問題