假设我有一个包含两列的表SESSIONS - " session_id"和"用户名"它告诉我哪个用户参与了我的网站中的哪个会话。我还有另一个表USERS,其中包含列"用户名"和#34;国家"。现在,当我想知道来自每个国家的会议数量时,我确实
SELECT count(*), sessions.username, users.country
FROM sessions
INNER JOIN users
ON sessions.username=users.username
GROUP BY country
现在问题在于:并非SESSIONS表中列出的每个用户在USERS表中都有一行。对于那些用户我想写"未知"对于国家,但不要完全忽视他们的会议。
是否有正确的"在SQL查询中直接执行此操作的方法?我可以在合适的查询后总是做一些PHP魔术,或者当一行被添加到SESSIONS并且用户当前不在USERS中时将用户添加到USERS表中,但是我想知道是否有一些SQL方法来检测&#34 ;缺失"行并为它们分配一些默认值。
答案 0 :(得分:4)
它被称为OUTER
加入(而不是INNER
)。
更具体地说,您可以使用LEFT OUTER JOIN
,它会返回" left"中的所有行。表格(sessions
),即使"右边的#34;表格1}})。在这种情况下,users
表的返回值为users
。您可以使用标准函数NULL
将这些COALESCE
值替换为其他值,例如' unknown'。
NULL
答案 1 :(得分:2)
使用Left Join
来实现需要输出
SELECT count(*), sessions.username, ISNULL(users.country,'Unknown')
FROM sessions
LEFT JOIN users ON sessions.username=users.username
GROUP BY sessions.username, users.country