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;
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...