繁体   English   中英

获取分别存在于另一个具有空值的表中的记录数

[英]get count number of records which respectively exist in another table with null value also

我有两张桌子。 “ listing_messages”和“ listing_message_history”。

listing_messages  
=============  
message_id   listing_id    listing_user   third_party_user  
1            162           7              32  
2            162           7              33  
3            162           7              12  

listing_message_history  
======================  
listing_message_history   message_id  is_checked  
1                         1           0  
2                         1           1  
3                         1           1  
4                         2           0  
5                         2           1  
6                         3           0  

搜索条件==> listing_user = 7,is_checked = 1
我想要结果。

message_id    count_of_unread_message_history  
12         
2             1    
3             0   

我已经查询了

SELECT count(`lmh`.`message_history_id`) AS COUNT,
       `lmh`.`message_id`
FROM `listing_message_history` AS `lmh`
LEFT JOIN `listing_messages` AS `lm` ON `lmh`.`message_id` = `lm`.`message_id`
WHERE `lm`.`third_party_user`=7
  AND `lmh`.is_checked=1
GROUP BY `lm`.`message_id`

但它不会返回count = 0的message_id,其中message_id没有is_checked = 1

通常,当您使用left join ,第二个表上的过滤条件应放在on子句中,而不是where子句中。 尝试这个:

SELECT count(`lmh`.`message_history_id`) AS COUNT,
       `lmh`.`message_id`
FROM `listing_message_history` `lmh` LEFT JOIN
     `listing_messages` `lm`
     ON `lmh`.`message_id` = `lm`.`message_id` AND
        `lm`.`third_party_user` = 7
WHERE `lmh`.is_checked = 1
GROUP BY `lmh`.`message_id`;

另外,您应该将第一个表用于group by ,而不是第二个表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM