左连接和内连接在同一个mysql查询中不起作用

时间:2014-05-19 04:39:41

标签: mysql sql join left-join

我有三个表,尝试在三个表的同一查询中使用左连接和内连接。但它不按我想要的方式工作。 我有四个标签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

3 个答案:

答案 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