我有三个表,尝试在三个表的同一查询中使用左连接和内连接。但它不按我想要的方式工作。 我有四个标签A,B,C,D,agent_id = 22只使用两个标签。 以下是我正在使用的查询
SELECT MDT.tags,COUNT(MDTM.tag_id) AS tagCount
FROM mp_desk_agent_added_customers MDAC
INNER JOIN mp_desk_tags_match MDTM
ON MDAC.u_cust_id=MDTM.u_cust_id
INNER JOIN mp_desk_tags MDT
ON MDTM.tag_id=MDT.tag_id
WHERE MDAC.agent_id=22
GROUP BY MDT.tag_id
我得到的结果只是两个标签名称及其在tag_match表中的计数。但我希望所有四个标签名称和计数为0,用于tag_match表中不存在的标签。
mp_desk_tags
标签,tag_id
mp_desk_tags_match
tag_match_id,TAG_ID,u_cust_id
mp_desk_agent_added_customers
u_cust_id,AGENT_ID
答案 0 :(得分:1)
有四个标签,您需要四个结果记录,每个标签一个。所以从标签表中选择。您可以通过子选择获得计数。
select
tag_id,
tag,
(
select count(*)
from mp_desk_tags_match dtm
where dtm.tag_id = dt.tag_id
and u_cust_id in
(
select u_cust_id
from mp_desk_agent_added_customers
where agent_id = 22
)
) as tag_count
from mp_desk_tags dt;
以下是联接:
select
dt.tag_id,
dt.tag,
count(*)
from mp_desk_tags dt
left join mp_desk_tags_match dtm on dtm.tag_id = dt.tag_id
left join mp_desk_agent_added_customers daac on daac.u_cust_id = dtm.u_cust_id
and daac.agent_id = 22
group by dt.tag_id;
答案 1 :(得分:0)
SELECT MDT.tag_id,COUNT(MDTM.tag_id) AS tagCount
FROM mp_desk_agent_added_customers MDAC
INNER JOIN mp_desk_tags_match MDTM
ON MDAC.u_cust_id=MDTM.u_cust_id
AND MDAC.agent_id=22
RIGHT JOIN mp_desk_tags MDT
ON MDTM.tag_id=MDT.tag_id
GROUP BY MDT.tag_id
答案 2 :(得分:0)
查看您的表结构,您的查询应该是:
SELECT MDT.tags,COUNT(MDTM.tag_id) AS tagCount
FROM mp_desk_agent_added_customers MDAC
INNER JOIN mp_desk_tags_match MDTM
ON MDAC.u_cust_id=MDTM.u_cust_id
LEFT JOIN mp_desk_tags MDT
ON MDTM.tag_id=MDT.tag_id
WHERE MDAC.agent_id=22
GROUP BY MDT.tag_id
这假设第一个表格MDAC没有在MDT表中返回记录,这会使您的总计仅显示前2个标记ID