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;
    

要回复问题请先登录注册