2010-12-02 141 views
2

我有兩個表格:調用和附件,我想顯示調用表中的所有內容,但也顯示調用是否有附件, - 通過確定是否存在帶有call_id的附件記錄。也許有附件,也許沒有。sql select count

電話
CALL_ID
標題
描述

附件
attach_id
attach_name
CALL_ID

如果我寫:

select call_id, title, description from calls 

給我的所有呼叫的列表....

我怎麼能還包括該呼叫記錄是否有附件(S)或不?

謝謝,

回答

3

可以使用外部聯接來實現:

SELECT c.call_id, title, description, attach_name 
FROM calls c 
LEFT OUTER JOIN attachments a ON c.call_id = a.call_id 

的,如果沒有附件中發現上述將爲attach_name顯示(NULL)。您可以使用ISNULL(),以提供一個默認值,如果沒有attach_name被發現,如:

SELECT c.call_id, title, description, 
    ISNULL(attach_name, '(No attachment)') as attach_name 
FROM calls c 
LEFT OUTER JOIN attachments a ON c.call_id = a.call_id 
+0

我每次通話不知道外連接構造非常好,所以我有一個問題:如果一個調用不止一個附件,這個查詢返回什麼?它是否重複前三個字段或....?謝謝! – Lorenzo 2010-12-02 01:16:05

+0

@Lorenzo - 是的,它會複製前三列,並且每行顯示一個附件。如果你想要一個單獨的記錄和附件的數量,你的答案是要走的路,儘管你還需要將你的查詢改爲外部連接。 – LittleBobbyTables 2010-12-02 01:18:26

1
select a.call_id, a.title, a.description, count(b.attach_id) 
from calls a, attachments b 
where a.call_id = b.call_id 
group by a.call_id, a.title, a.description 
union all 
select distinct a.call_id, a.title, a.description, 0 
from calls a, attachments b 
where not exists (select call_id from calls c where c.call_id = a.call_id) 

這會給附件的計數與相同標題和描述