2014-01-24 3 views
0

Скажите, что у меня есть таблица и некоторые значения, как показано ниже.Подзапрос Mysql возвращает Подзапрос возвращает более 1 строки ошибки

----------------------------------------- 
| col1 | col2 | col3 | col4 | col5 | 
    ---------|------|-------|-------|-------- 
| 6171368 | 1 | TEST | 12053 | 123456 | 
    ----------------------------------------- 
| 6171368 | 2 | ABCD | QWERT |  | 
    ----------------------------------------- 

Что я хочу сделать, это мне нужно, чтобы получить значение col5 1 строки, если значение col5 пусто без использования где Conditon исключить where col2 = 2. Когда я попытался с помощью запроса я получаю сообщение об ошибке говорящее

1242 - подзапрос возвращает более 1 строки

Мой запрос

SELECT col1,col2,col3,col4, 
if (col5 IS NULL or col5 = '' , 
    (
     select col5 from table 
     where col2 = 1 
     group by col1 
    ),'') as col5 

ответ

1

Требуется коррелированный подзапрос, который получает действительное значение col5 для строки (при условии, что у вас несколько строк).

SELECT col1, col2, col3, col4, 
     (case when col5 IS NULL 
      then (select col5 
        from table t2 
        where t2.col1 = t.col1 and 
         t2.col5 is not null 
        limit 1 
       ) 
     end) as col5 
from table t; 
0

От ошибки, мы можем попробовать что-то вроде ниже:

SELECT col1,col2,col3,col4, 
if (col5 IS NULL or col5 = '' , 
    (
     select col5 from table 
     where col2 = 1 
     group by col1 limit 1 
    ),'') as col5 
Смежные вопросы