【问题标题】:MySQL - Match results against a list even if count is zeroMySQL - 即使计数为零也将结果与列表匹配
【发布时间】:2015-02-10 04:46:36
【问题描述】:

我有一个结果列表,可能只显示少数几个州,但我需要每次都显示完整的州列表。

结果如下所示:

AK 1
AL 5
CA 3
...
WV 4
WY 6
UN 10

但应该返回为:

AK 1
AL 5
AR 0
AZ 0
CA 3
CO 0
CT 0
...
WV 4
WY 6
UN 10

是否只是对状态列表进行内部连接以确保始终存在计数为零的状态?我没有状态表,但我有一个状态列表,例如“AK”、“AL”、“AR”等。我不确定是否可以这样加入。查询太大,无法发布,但如果需要,我会看看是否可以提出一些建议。

【问题讨论】:

  • 您有正在使用的查询吗?
  • 使用子查询而不是连接(在子查询中使用计数)
  • mysql 更好地优化连接;必须小心使用子查询,并确定 mysql 将如何处理它们。但是内部连接在这里无济于事;使用下面答案中建议的 LEFT JOIN。
  • 如果我有一个状态表,那么连接会很容易,但是对于像 "AK","AL","AR" 等这样的列表呢?

标签: mysql sql join inner-join union


【解决方案1】:

您可以 LEFT JOIN 到状态列表,例如:

SELECT a.St
      ,COUNT(b.St) AS Ct
FROM State_List a
LEFT JOIN Other_Table b
  ON a.St = b.St
GROUP BY a.St

LEFT JOIN 将从连接左侧的表中返回非连接记录,在本例中为状态列表。然后我们COUNT() 表中可能加入也可能不加入的字段。

【讨论】:

  • 如果我加入一个表格,那很好,但是加入一个像“AK”,“AL”,“AR”等的列表怎么样?
  • 我相信你需要把你的清单变成一个表格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
相关资源
最近更新 更多