[英]MYSQL: Count # of rows in another table corresponding to rows in first table
我有三個表:客戶(業務列表,每個業務都有一個AccountID),聯系人(人員列表,通過AccountID綁定到Accounts表)和ContactComments(為各個聯系人留下的注釋列表,綁定到通過ContactID的“聯系人”表)。 我正在嘗試顯示所有聯系人的列表,以及每個聯系人獲得了多少條評論(有些評論為零)。 這是我當前的查詢:
select
a.ContactID, a.ContactType, a.FirstName, a.LastName, a.Phone, a.Email,
b.AccountName,
c.ContactID, count(c.CommentID) as CountCon
from
Contacts a, Accounts b, ContactComments c
where
a.AccountID = b.AccountID
group by a.ContactID
order by a.LastName
當我通過PHP在頁面上顯示此內容時,我得到了:
Nonexistant Holdings, LLC Larry Boe 941-555-8888 larry@example.com View Comments 16
Another Subcontractor, Inc. Eric Coe 941-555-6000 eric@example.com View Comments 16
Nonexistant Holdings, LLC Yasmeen Crith 941-555-9999 yasmeen@asdf.com View Comments 16
ABC Realty, Inc. Jane Doe 941-555-1111 jane@example.com View Comments 16
XYZ Properties, LLC Jim Foe 941-555-2222 jim@example.com View Comments 16
當前每一行末尾的16是注釋表中的注釋總數。 我意識到我的查詢已關閉,因為我的count(c.CommentID)當然是對所有注釋進行計數。 如何調整此設置,以便獲得每個聯系人的評論數並在每行末尾顯示(如果聯系人沒有評論,則包括零)? 這是我需要加入才能完成的事情嗎? (目前還不太熟悉聯接。)
顯式聲明您的加入將有助於您查看問題所在。 例如,如果您顯式聲明了聯接,這就是查詢將轉換為的內容
select
a.ContactID, a.ContactType, a.FirstName, a.LastName, a.Phone, a.Email,
b.AccountName,
c.ContactID, count(c.CommentID) as CountCon
from
Contacts a
join Accounts b on a.AccountID = b.AccountID
join ContactComments c --(but you are missing join qualifiers so this would need to be declared as a cross join for your query to run)
group by a.ContactID
order by a.LastName
您想要的是什么(編輯:根據評論者將notull更新為ifnull):
select
a.ContactID, a.ContactType, a.FirstName, a.LastName, a.Phone, a.Email,
b.AccountName,
c.ContactID, ifnull(count(c.CommentID), 0) as CountCon
from
Contacts a
join Accounts b on a.AccountID = b.AccountID
left join ContactComments c on a.ContactID = c.ContactID
group by a.ContactID
order by a.LastName
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.