enter image description here

我有两个表broadcastcontact,我想在这个特定的广播收件人的数量计数,如果没有用户仍然所有广播列表应显示.为此,我通过这个左连接查询获得了所需的输出.

SELECT b.id, b.brl_name, COUNT(c.broadcast_list_id) AS Recepients FROM broadcastlistsms b LEFT JOIN addcontact c ON b.id = c.broadcast_list_id GROUP BY b.id,b.brl_name;

但我在两个表中都有两个公共字段,它们是由和isdeleted创建的,isdeleted(1)是删除特定的联系人和广播.所以我只想得到联系人数量,它不是由特定用户删除和创建的.与广播类似,广播不应由特定用户删除和创建.

我try 了这个,但它没有提供有0个联系人的广播条目.

SELECT b.id, b.brl_name, COUNT(c.broadcast_list_id) AS Recepients FROM broadcastlistsms b LEFT JOIN addcontact c ON b.id = c.broadcast_list_id 
WHERE (b.createdby_id = 1 and b.isdeleted = 0) and (c.createdby_id = 1 and c.isdeleted = 0)
GROUP BY b.id,b.brl_name;

在future ,联系人表中还会有3个字段,如isdeleted,然后我还需要判断所有这3个字段,并根据该字段需要一个计数值.

推荐答案

下次,请以文本格式或更好的SQL格式提供数据:https://www.db-fiddle.com/f/aYULH8tP5yVB18ffkJNvFe/0

try 组织查询,使其更具可读性.

问题是,您在WHERE中添加了Contact个条件,通过这样做,Broadcast也将被过滤,您必须在LEFT JOIN中添加所有Contact个条件.

要获得图像中显示的所需输出(列出所有广播),您不能过滤广播:

SELECT b.id, 
       b.name, 
       COUNT(c.broadcast_Id) AS Recepients 
FROM Broadcast b 
LEFT JOIN Contact c ON b.id = c.broadcast_Id 
                   AND c.Created_by = 1 
                   AND c.isdeleted = 0
GROUP BY b.id,
         b.name

但要获得您描述的输出(仅显示未被特定用户删除和过滤的内容),请执行以下操作:

SELECT b.id, 
       b.name, 
       COUNT(c.broadcast_Id) AS Recepients 
FROM Broadcast b 
LEFT JOIN Contact c ON b.id = c.broadcast_Id 
                   AND c.Created_by = 1 
                   AND c.isdeleted = 0
WHERE b.IsDeleted = 0 
  AND b.Created_by = 1
GROUP BY b.id,
         b.name

Mysql相关问答推荐

返回50%的随机结果

SQL不断返回查询失败,并且不知道从这里到哪里go

MySQL-如何检测时间戳中的一天

查找表中的唯一记录

如何进行查询以在两个不同的列中搜索两个不同的数据字符串?

Mysql 查询返回未定义的 node.js

如何找到每个user_id每个产品的买家类型数量?

为两个中的每一个 Select 最大和最小传递条件

SQL使用LIMIT获取结果和结果中的行数

分别针对每个不同的列 Select 聚合

如何同时从同一个表中 Select 从 SQL 表中删除行

Mysql Pivot 查询/建议

MySQL 使用了错误的索引

提取 MySQL 5.7 连续值的差异

如何在 MYSQL 中使用多个表进行插值

限制正则​​表达式中多字符通配符的范围

如何通过 mysql workbench 将数据导入 mysql 数据库?

在 MySQL 中找不到 outfile 创建的文件

如何使用 XML_LOAD() 将 XML 文件导入 MySQL 数据库表;功能

将行插入 MySQL 数据库的最有效方法