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

标签 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 表中。但我想要所有四个标签名称,并且对于 tag_match 表中不存在的标签计为 0。

表结构

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

最佳答案

有四个标签,您需要四个结果记录,每个标签一个。因此从标签表中选择。您可以通过子选择来获取计数。

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;

关于mysql - 同一 mysql 查询中的左连接和内连接不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23729813/

相关文章:

php - 如何防止 PHP 中的 SQL 注入(inject)?

sql - 你如何确定什么应该是主键?

mysql - PHPMyAdmin | PHPMyAdmin |事件调度程序无法启用并出现 #1577 错误

php - 使用 Jquery 更新 mysql 数据库中的复选框和文本区域值

MySQL查询以获取所有最高ID

database - 数据库连接何时以及为何成本高昂?

php - php如何使用条件获取多个表列值

postgresql - 通过另一个表 postgresql 连接两个表中的数据

mysql - 连接多个表 - 评论和回复

MySQL:如何通过脚本创建具有自动递增列的表