同一mysql查询中的左连接和内部连接不起作用
我有三个表,并试图在同一个查询中使用左连接和内连接。但这不是我想要的方式。 我有四个标签A、B、C、D,代理_id=22只使用了两个标签。 下面是我正在使用的查询同一mysql查询中的左连接和内部连接不起作用,mysql,sql,join,left-join,Mysql,Sql,Join,Left Join,我有三个表,并试图在同一个查询中使用左连接和内连接。但这不是我想要的方式。 我有四个标签A、B、C、D,代理_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
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
我得到的结果是两个标记名和它们的计数,它们出现在标记匹配表中。但我希望所有四个标记名和计数为0,用于标记匹配表中不存在的标记
表结构
mp_桌面_标签
标签,标签号
mp_桌面_标签_匹配
标记匹配id、标记id、用户id
mp\u桌面\u代理\u添加客户
u_cust_id,agent_id查看您的表结构,您的查询应该是:
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
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
这是假设第一个tabel MDAC在MDT表中没有返回的记录,这将使您的总计仅显示前2个标记id的值。共有四个标记,您需要四个结果记录,每个标记一个。因此,请从标记表中选择。您可以通过子选择获得计数
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和2以及它们的计数。但不是3和4。