2015-09-10 239 views
0

我有下面的语句返回今天的日期流ID号,加入到另一个表,所以我们可以看到更多元数据。尽管左连接,但它并没有显示所有的枢纽今天有数据。我假设它可能是由于where子句,但不知道如何解决这个问题。建议?为什么NULL值不会在LEFT JOIN中返回?

SELECT O.DATE, 
      R.HUB, 
      COUNT (O.FLOWID) AS point_counts 
    FROM table_r R 
      LEFT JOIN table_o O ON O.FLOWID = R.FLOWID 
    WHERE O.DATE = CONVERT(date,GETDATE()) 
    GROUP BY O.DATE, R.HUB 
    ORDER BY R.HUB 
+4

因为你把你的'LEFT JOIN'与您'WHERE'子句的'INNER JOIN'。将'WHERE'子句移到'ON'子句。 – Siyual

回答

4

where条件移至join条款。

1

因为正在使用的过滤器:O.DATE = CONVERT(date,GETDATE()),基本上使其成为一个INNER JOIN,由于在从外表中的列施加的滤波器。

+0

那么有没有办法在今天的日期仍然有效地过滤值?或没有。 – phinite

+0

今天的含义CONVERT(date,GETDATE()) – phinite

+0

取决于你想要的结果数据。如果日期来自外部表,并且您只需要今天的结果,那么您就是说每个结果都必须位于外部表中(不能有'NULL') – Lamak

0

问题是您使用where子句筛选左连接的表。如果你只是想左连接表返回行,其中日期=今天的日期,and o.date=convert(date,getdate())后上的标准加入

0

您可以尝试移动WHERE条件的加盟,也删除GROUP BY O.DATE,因为你只能过滤DATE今天的日期,它没有任何意义GROUP BY的日期再次

SELECT MAX(O.DATE), 
      R.HUB, 
      COUNT (O.FLOWID) AS point_counts 
    FROM table_r R 
    LEFT JOIN table_o O 
     ON O.FLOWID = R.FLOWID 
     AND O.DATE = CONVERT(date,GETDATE()) 
    GROUP BY R.HUB 
    ORDER BY R.HUB 
相关问题