2014-08-27 79 views
0

來自連接表的記錄存在且不存在獲取所有數據fron加入表存在且不存在

表文章;

+------------+-------+--------+- 
| id| cat-id |aut-id |content | 
+------------+-------+--------+ 
| 1 | 1 | 3 |eeeeeee | 
| 2 | 2 | 4 |fffffff | 
| 3 | 8 | 5 |ggggggg | 
| 4 | 9 | 2 |jjjjjjj | 
+------------+-------+--------+ 

表類別;

+--------------+ 
| id| cat-name | 
+--------------+ 
| 1 | phy | 
| 2 | che | 
| 3 | bio | 
+--------------+ 

表作者;

+--------------+ 
| id| aut-name | 
+--------------+ 
| 4 | joe | 
| 5 | sam | 
| 6 | kim | 
+--------------+ 

我想這個結果

+------------+-------+--------+--------+--------+ 
| id| cat-id |aut-id |cat-name|aut-name|content | 
+------------+-------+--------+--------+--------+ 
| 1 | 1 | 3 | phy |unknown |eeeeeee | 
| 2 | 2 | 4 | che | joe |fffffff | 
| 3 | 8 | 5 | uncat | sam |ggggggg | 
| 4 | 9 | 2 | uncat | unknown|jjjjjjj | 
+------------+-------+--------+--------+--------+ 
+0

嘗試新鮮事物了嗎?如果沒有,那麼首先看一下sql – 2014-08-27 18:35:03

+0

中的連接,你使用的是什麼RDBMS? – Donal 2014-08-27 18:48:04

回答

0

只是LEFT JOIN的數據,因此你不會過濾掉數據缺失

QUERY:

SELECT 
    a.`id`, 
    a.`cat-id` , 
    a.`aut-id` , 
    COALESCE(c.`cat-name`, 'uncat') as 'cat-name', 
    COALESCE(a1.`aut-name`, 'unknown') as 'aut-name' , 
    a.`content` 
FROM `article` a 
LEFT JOIN `categories` c on c.`id` = a.`cat-id` 
LEFT JOIN `authors` a1 on a1.`id` = a.`aut-id` 

使用COALESCE來處理空值並輸入您想要的結果

DEMO

OUTPUT:

+------------+-------+--------+--------+--------+ 
| id| cat-id |aut-id |cat-name|aut-name|content | 
+------------+-------+--------+--------+--------+ 
| 1 | 1 | 3 | phy |unknown |eeeeeee | 
| 2 | 2 | 4 | che | joe |fffffff | 
| 3 | 8 | 5 | uncat | sam |ggggggg | 
| 4 | 9 | 2 | uncat | unknown|jjjjjjj | 
+------------+-------+--------+--------+--------+ 
+0

感謝您的幫助,很大的幫助,將空值放入預期的結果.. – 2014-08-27 19:20:47

+0

@SaraArif沒問題!祝你的編程工作順利! :) – 2014-08-27 19:21:10