如何解决MySQL连接显示表a的成员在表b中为空,但反之亦然
| 我敢肯定,这已经被问过了,对此我再次道歉,但是我已经做了一些搜索,寻找了错误的术语,只是找不到正确的方法。 我有两张桌子。 “网站”是网站列表(id | website),“ cdd”是用户列表以及从中引荐用户的网站(userid | website | etc.)。并非每个介绍用户的网站都是赞助商,因此不是网站表中的赞助商。另外,并非每个赞助商网站都向我们发送了用户。我需要每个赞助商的用户数列表,包括0。 这是我到目前为止的查询:SELECT w.website,COUNT(*) AS num FROM websites w LEFT JOIN cdd c ON w.website = c.website WHERE c.submitted LIKE \'05/26/11 %\' GROUP BY w.website ORDER BY num DESC;
网站表中有五个网站,但其中一个尚未发送任何用户。那个不会出现在查询中。
有什么想法吗?
解决方法
LEFT JOIN是正确的,但是由于您要在联接右侧的表(cdd)上指定WHERE子句,因此您将筛选出没有关联的cdd记录的网站。您需要像这样指定该条件:
[...]
FROM websites w
LEFT JOIN cdd c ON w.website = c.website
WHERE c.submitted IS NULL OR c.submitted LIKE \'05/26/11 %\'
[...]
其中包括未加入任何cdd记录的网站,或者
[...]
FROM websites w
LEFT JOIN cdd c ON w.website = c.website AND c.submitted LIKE \'05/26/11 %\' \'Replaces WHERE clause
[...]
其中包括所有网站,但仅加入具有匹配提交日期的cdds。
注意:为确保没有关联用户的网站返回的计数为0,您可能还需要从cdd
中而不是column5ѭ中COUNT()
列...
,
我需要每个赞助商的用户数列表,包括0。
在这种情况下,您可能应该使用左联接:
SELECT a.site,COUNT(b.ref_site) AS num FROM table1 a LEFT JOIN table2 b ON a.site = b.ref_site GROUP BY a.site;
, 相反,将INNER JOIN设为LEFT JOIN,我认为您很好。
SELECT a.site,COUNT(b.ref_site) AS num
FROM table1 a
LEFT JOIN table2 b
ON a.site = b.ref_site
GROUP BY a.site;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。