2017-11-30 10 views
0

3テーブルの特定のSELECTのためにあなたの助けが必要です。私はSQLに熟練していないので、COUNT(私が推測する)をクエリに適用しなければならないので、難しいです。SELECT私のためです。3つのテーブルの数で選択

私はあなたに私のテーブルを示しています。enter image description here

私は、データベースにあるどのように多くの連絡先知っておく必要があります(すべての連絡先!!!!)とどのように多くの写真動画が結合しています任意の連絡先に送信します。

私はこれと同様の結果が得られます。

----------------------------------- 
| ID | NAME  | PHOTO | VIDEO | 
----------------------------------- 
| 1 | MARK  | 3  | 1  | 
----------------------------------- 
| ID | LISA  | 2  | 0  | 
----------------------------------- 

はあなたがクエリ内の重複について躊躇している場合は、SQLを使用することができ、次のアプローチを使用することができ、あなたの助け

+0

を引き起こす与えるのだろうか?あなたの現在のクエリの試みを私たちに教えてください。 – jarlh

答えて

1

いただき、ありがとうございます関数と型パラメータを文字列として渡します。不明な数の型(ビデオ、写真、テキストなど)がある場合は、出力テーブル形式を再設計する必要があります(TYPE、CONTACT_ID、COUNTの次のタプルを使用します)。最悪の場合は動的クエリ構築になります。クエリの下

select c.ID, c.NAME, 
(select count(*) from CONTACT_MEDIA cm join MEDIA m on 
m.ID = cm.ID_MEDIA and m.TYPE = 'PHOTO' where cm.ID_CONTACT = c.ID) as PHOTO, 
(select count(*) from CONTACT_MEDIA cm join MEDIA m on 
m.ID = cm.ID_MEDIA and m.TYPE = 'VIDEO' where cm.ID_CONTACT = c.ID) as VIDEO 
from CONTACT c 
+0

ありがとう、これは私が必要なものだと思われる:) – MDP

+0

Np。私はもう一度私の答えを編集するつもりはありません。しかし、私はダイナミックなアプローチについてコメントしたいと思います。その場合、すべてのユニークな型を見つけて、新しい出力col定義を文字列の形式でクエリに追加し、その後に 'sp_executesql'を使用して構築されたクエリを実行する必要があります。それは動作しますが、効率的ではなく、クライアントの観点からは消費しにくいです。しかし、オプションがなければ、それは行く方法です。 – Irdis

1

使用してください、これはあなたが正確にあなたが何をしようとしている

select contact_media.ID_Contact, contact.Name, count(M1.ID) as 'PHOTO', COUNT(M2.ID) as 'VIDEO' from Contact inner join contact_media on Contact.ID=contact_media.ID_Contact 
left outer join media M1 on contact_media.ID_Media=M1.ID and M1.TYPE='PHOTO' 
left outer join media M2 on contact_media.ID_Media=M2.ID and M2.TYPE='VIDEO' 
group by contact_media.ID_Contact, contact.Name 
+0

助けていただきありがとうございます。私はあなたの質問を試みたが問題がある。連絡先に写真/ビデオがない場合、データベースから「取得」されません。データベース上のすべての連絡先が必要です。 すべての連絡先を取得するためにクエリを編集する必要がありますか? – MDP

関連する問題