我需要你对3张桌子上特定SELECT
的帮助。我对SQL
不熟练所以对我来说这是一个很难SELECT
,因为我必须将COUNT
(我猜)应用于查询。
我需要知道数据库中有多少联系人(所有联系人!!!!)以及有多少照片和视频必然会有任何联系。
我应该得到与此类似的结果:
-----------------------------------
| ID | NAME | PHOTO | VIDEO |
-----------------------------------
| 1 | MARK | 3 | 1 |
-----------------------------------
| ID | LISA | 2 | 0 |
-----------------------------------
感谢您的帮助
答案 0 :(得分:1)
您可以使用以下方法,如果您对查询中的重复项犹豫不决,可以使用sql函数并将type参数作为字符串传递。如果您有不确定的类型数量(视频,照片,文本等),您需要重新设计输出表格式(我会使用以下元组TYPE,CONTACT_ID,COUNT),或者在最坏的情况下使用动态查询构造。< / p>
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
答案 1 :(得分: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