Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
同一mysql查询中的左连接和内部连接不起作用_Mysql_Sql_Join_Left Join - Fatal编程技术网

同一mysql查询中的左连接和内部连接不起作用

同一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

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