【问题标题】:mysql 'IN' trouble when empty record空记录时mysql'IN'问题
【发布时间】:2013-08-09 10:13:01
【问题描述】:

我在尝试时使用的是 mysql:

SELECT GROUP_CONCAT(score)
FROM DailyScore
WHERE team = '42'
AND Date IN('2013-08-01','2013-08-02','2013-08-03','2013-08-04')

它会返回一个结果:

50,100,75

因为 42 队在 '2013-08-02' 没有得分

我希望我能得到:

50,,100,75

我应该使用什么 sql 查询?

【问题讨论】:

标签: mysql


【解决方案1】:

如果您的意思是2013-08-02 的分数为空,那么您应该使用IFNULL

SELECT GROUP_CONCAT(IFNULL(score, ''))
FROM DailyScore
WHERE team = '42'
AND Date IN('2013-08-01','2013-08-02','2013-08-03','2013-08-04')

如果您的意思是团队42 没有2013-08-02 的记录,您应该考虑使用calendar table

SELECT GROUP_CONCAT(IFNULL(score, ''))
FROM DailyScore
RIGHT JOIN Calendar ON Calendar.Date = DailyScore.Date
                   AND team = '42'
AND Calendar.Date IN('2013-08-01','2013-08-02','2013-08-03','2013-08-04')

demo

作为旁注,您似乎也可以使用BETWEEN

SELECT GROUP_CONCAT(IFNULL(score, ''))
FROM DailyScore
WHERE team = '42'
AND Date BETWEEN '2013-08-01' AND '2013-08-04'

【讨论】:

  • +1 表示多重答案,但事实上,他需要在calendar tablecalendar table 之间的中间值才能获得最佳结果
  • “日历表”是一个很好的参考。谢谢。日期是从其他查询中获取的,所以不能使用“BETWEEN”
  • 查询不工作。 “team = '42'”应该在“ON”之后而不是在“WHERE”之后。
  • @TheoYmca 是的,你是对的,你已经更新了我的答案,或者你可以做WHERE team='42' OR team IS NULL,但我认为作为连接子句的一部分,条件更好、更正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多