如何让SQL INNER JOIN接受null结果

Tom*_*man 32 sql sql-server join inner-join

我有以下查询:

SELECT TOP 25 CLIENT_ID_MD5, COUNT(CLIENT_ID_MD5) TOTAL 
FROM dbo.amazonlogs 
GROUP BY CLIENT_ID_MD5 
ORDER BY COUNT(*) DESC;
Run Code Online (Sandbox Code Playgroud)

哪个回报:

283fe255cbc25c804eb0c05f84ee5d52    864458
879100cf8aa8b993a8c53f0137a3a176    126122
06c181de7f35ee039fec84579e82883d    88719
69ffb6c6fd5f52de0d5535ce56286671    68863
703441aa63c0ac1f39fe9e4a4cc8239a    47434
3fd023e7b2047e78c6742e2fc5b66fce    45350
a8b72ca65ba2440e8e4028a832ec2160    39524
...
Run Code Online (Sandbox Code Playgroud)

我想使用此查询中返回的MD5检索相应的客户端名称(FIRM),因此行可能如下所示:

879100cf8aa8b993a8c53f0137a3a176    126122    Burger King
Run Code Online (Sandbox Code Playgroud)

所以我提出了这个问题:

SELECT a.CLIENT_ID_MD5, COUNT(a.CLIENT_ID_MD5) TOTAL, c.FIRM 
FROM dbo.amazonlogs a 
  INNER JOIN dbo.customers c 
    ON c.CLIENT_ID_MD5 = a.CLIENT_ID_MD5
GROUP BY a.CLIENT_ID_MD5, c.FIRM 
ORDER BY COUNT(*) DESC;
Run Code Online (Sandbox Code Playgroud)

这返回类似于:

879100cf8aa8b993a8c53f0137a3a176    126122    Burger King
06c181de7f35ee039fec84579e82883d    88719     McDonalds
703441aa63c0ac1f39fe9e4a4cc8239a    47434     Wendy's
3fd023e7b2047e78c6742e2fc5b66fce    45350     Tim Horton's
Run Code Online (Sandbox Code Playgroud)

哪个有效,除非我需要为c.FIRM返回一个空值,如果给定的MD5没有相应的FIRM.例如:

879100cf8aa8b993a8c53f0137a3a176    126122    Burger King
06c181de7f35ee039fec84579e82883d    88719     McDonalds
69ffb6c6fd5f52de0d5535ce56286671    68863
703441aa63c0ac1f39fe9e4a4cc8239a    47434     Wendy's
3fd023e7b2047e78c6742e2fc5b66fce    45350     Tim Horton's
Run Code Online (Sandbox Code Playgroud)

即使没有相应的c.FIRM,我应该如何修改查询仍然返回一行?

evi*_*one 107

替换INNER JOINLEFT JOIN

  • 即使在您要加入的其他表中没有匹配项,LEFT JOIN也会返回行.INNER JOIN不会,如果在其他表中匹配,则只返回行 (11认同)

Pun*_*nit 12

LEFT JOIN而不是INNER JOIN