我創造了這樣的小提琴,在此鏈接: http://www.sqlfiddle.com/#!2/7e007選擇是否值存在
我could'nt發現SQL緊湊/ CE所以它是在MySQL。
的表格看起來像這樣
Records Clients
ID | NAME | AGE ID | NAME
------------------ ----------------
1 | John | 20 1 | John
2 | Steven | 30 2 | Daniel
3 | Abraham | 30 3 |
4 | Donald | 25 5 | Lisa
6 | | 35 6 | Michael
7 | | 42 7 |
我想從兩個表中選擇,如果ID是兩個表中,並都有名字,我想的名字從「客戶」作爲默認。如果記錄中的名稱爲空,請使用客戶名稱(如果有)以及Clients.Name爲空;使用records.Name。
從上面的表,我想這一點:
ID | NAME | AGE
------------------
1 | John | 20
2 | Daniel | 30
3 | Abraham | 30
4 | Donald | 25
5 | Lisa |
6 | Michael | 35
7 | | 42
我如何在SQL精簡做到這一點?
編輯: 感謝偉大的答案在下面,我設法想出這個查詢,幾乎工程:
SELECT t.id, t.name, t.age FROM
(
(
SELECT r.id,
CASE WHEN r.name = NULL THEN c.name ELSE r.name END as name,
r.age
FROM Records r
LEFT JOIN Clients c ON c.id = r.id
)
UNION
(
SELECT c.id, c.name, null as age FROM Clients c where c.id NOT IN (select id from Records)
)
) as t ORDER BY t.id
這給了我這樣的輸出:
ID | NAME | AGE
------------------
1 | John | 20
2 | Daniel | 30
3 | Abraham | 30
4 | Donald | 25
5 | Lisa |
6 | | 35
7 | | 42
「邁克爾」 (應該在#6)在這種情況下缺少。爲什麼?!
在案件中使用此部分:'CASE WHEN c.name <>''' –
@BrokenHeartღ也嘗試過這一點,結果相同。 「當c.name not是null時,使用c.name或者使用r.name」。 「邁克爾」不見了,這真是令人困惑。 – gubbfett
@BrokenHeartღ抱歉!你完全正確。 <> NULL是錯誤的(即使這個帖子實際上是空的),但是當我改成<>''它工作。我會給你的答案的信譽。謝謝! – gubbfett