2013-08-07 3 views
-1

Я использую MySQL, когда я пытаюсь:MySQL «IN» неприятности, когда пустая запись

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-запрос я должен использовать?

+0

возможный дубликат [Почему MYSQL IN ключевое слово не считая NULL значения] (http://stackoverflow.com/questions/10810391/why-mysql-in-keyword-not-considering-null -значения) –

+0

У меня нет времени, чтобы набрать какой-то пример кода, но я думаю, вы найдете хорошую помощь в этой статье (http://use-the-index-luke.com/blog/2011 -07-30/MySQL-строка-генератор). –

ответ

5

Если вы имеете в виду, что оценка для 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') 

Если вы имеете в виду не существует запись для 2013-08-02 для команды 42, вы должны смотреть на использовании 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' 
+0

+1 для мульти-ответа, но в вопросе факта ему нужно что-то посередине «между» с «таблицей календаря», чтобы получить лучший результат. – jaczes

+0

«таблица календаря» является хорошей ссылкой. спасибо. дата взята из другого запроса, поэтому не может использовать «BETWEEN» –

+1

запрос не работает. «team = '42» следует после «ON» вместо «WHERE». –

Смежные вопросы