2015-03-23 6 views
-1

EDIT: все в порядке, я решил. См. Ниже причину.Sub-query возвращает несколько значений

У меня есть следующий подзапрос SQL. В нем говорится, что подзапрос возвращает несколько строк.

select MIN(XXXX) 
FROM MyDB.ball b2 
where b2.XXXX > b.XXXX and b2.LLLL=b.LLLL and b2.MMMM=b.MMMM 
and b2.IIII=b.IIII 

С b = b1 = MyDB.ball в глобальном запросе.

в полном контексте:

if(b.XXXX!='9999', 
(select DATE_FORMAT(Datedepar,'%d/%m/%Y') 
from ball b1 where b1.XXXX=(select MIN(XXXX) 
FROM MyDB.ball b2 where b2.XXXX > b.XXXX and b2.LLLL=b.LLLL 
and b2.MMMM=b.MMMM and b2.IIII=b.IIII)), '') 
as myResult, 

Я уже видел этот пост, но у меня нет группы по: SQL MIN() returns multiple values?

+0

Вы получаете ошибку даже при выполнении только SELECT? (Т.е. без "if (b.XXXX! = '9999', ...") – jarlh

+0

Nop. Я также пробовал с условием if, и он также выполняет – user3651845

+0

Итак, когда вы получаете ошибку, если это не с отдельным автономным, а не с условием? – jarlh

ответ

0

OK Я нашел причину. На самом деле это довольно глупо. Мне пришлось добавить еще одно предложение where после подзапроса. Здесь (некрасиво) Результат:

select DATE_FORMAT(Datedepar,'%d/%m/%Y') 
from FODEGI.ball b1 where b1.XXXX=(select MIN(XXXX) 
FROM FODEGI.ball b2 where b2.XXXX > b.XXXX and b2.LLLL=b.LLLL 
and b2.MMMM=b.MMMM and b2.IIII=b.IIII) and b1.LLLL=b.LLLL 
and b1.MMMM=b.MMMM and b1.IIII=b.IIII), '' 
0

Проблема состоит в том, что внешний подзапрос возвращает более одной строки, потому что больше чем одно значение соответствует минимуму.

Почему бы просто не использовать order by и limit?

select DATE_FORMAT(Datedepar, '%d/%m/%Y') 
from ball b1 
where b1.XXXX > b.XXXX and 
     b1.LLLL = b.LLLL and 
     b1.MMMM = b.MMMM and 
     b1.IIII = b.IIII 
order by b1.XXXX 
limit 1;