2017-11-30 11 views
0

3 테이블의 특정 SELECT에 대한 도움이 필요합니다. 나는 SQL에 숙련되어 있지 않다. 왜냐하면 나는 COUNT (아마도)을 쿼리에 적용해야하기 때문에 나를 위해 SELECT을 어렵게 만든다. (!!!! 모든 연락처) 나는 데이터베이스에 얼마나 많은 연락처을 알 필요가 enter image description here3 테이블의 개수 선택

얼마나 많은 사진비디오는 바인딩 :

나는 당신이 내 테이블을 보여 모든 연락처에게.

나는이 유사한 결과를 얻어야한다

: 당신이 SQL을 사용하여 쿼리에서 중복 주저하는 경우

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

+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