2010-12-02 12 views
2

コールと添付ファイルの2つのテーブルがあり、コールテーブルにあるすべてのものを表示したいだけでなく、コールに添付ファイルがあるかどうかを表示したい。たぶん、添付ファイルがあるかもしれません。sql select count

通話
CALL_ID
タイトル
説明

添付ファイル
がattach_id私が書く場合

をCALL_ID

attach_name:

私にすべてのコールのリストを与えるために0
select call_id, title, description from calls 

....

どのように私もこの通話記録は、添付ファイル(複数可)を持っているかどうかを含めることができますか?

おかげで、あなたは外を使用することができます

答えて

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)が表示されます。

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

Iとのすべての呼び出しのために、添付ファイルの数を与える:何attach_nameが見つからない場合は、次のような、デフォルト値を供給するISNULL()を使用することができます私は質問があります:コールが添付ファイル以上のものを持っている場合、このクエリは何を返しますか?それは最初の3つのフィールドを複製するのでしょうか....?ありがとう! – Lorenzo

+0

@Lorenzo - はい、それは最初の3つの列を複製し、行ごとに1つの添付ファイルを表示します。添付ファイルの数が1つのレコードが必要な場合は、答えが必要ですが、クエリを外部結合にも変更する必要があります。 – LittleBobbyTables

+0

はい、最初の3つのフィールドを複製しています... – thegunner

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) 

が、これは同じタイトルと説明

+0

Lorenzo、このクエリは呼び出しを返し、添付ファイルがある場合は列(添付ファイルの数)を含みますが、添付ファイルがない場合は含みません。 – thegunner

+0

常に4番目の列を返します。少なくとも1つがある場合、添付ファイルがない場合、またはその添付ファイルの数が0の場合 – Lorenzo

+0

英語には申し訳ありません:すべてのコール(0または数値)の添付ファイルの正確な数を返します – Lorenzo