MySQL в одной строке выбрать только столбец без нулевых значений

#mysql #sql #row

#mysql #sql #строка

Вопрос:

     SELECT r.id AS Id, r.slot AS Slot, rg.name AS Grade, rt.name AS Type,
    r.main_stat AS Main Stat, r.stat01 AS 1st Substat, r.stat02 AS 2nd Substat,
    r.stat03 AS 3rd Substat, r.stat04 AS 4th Substat,
    CASE WHEN r.isEquipted = 0 THEN 'FALSE' ELSE 'TRUE' END AS isEquipted      
    FROM runes r                                                                           
    INNER JOIN rune_grade rg                                                                  
    ON r.grade_id = rg.id                                                                  
    INNER JOIN rune_type rt                                                                   
    ON r.type_id = rt.id                                                                    
    WHERE r.id = 7;
  

У меня есть этот запрос, который выдает мне только одну запись. Это ‘7’ в предложении WHERE является переменной в моем коде.
Я хочу удалить столбцы, которые дают мне нулевые значения.
Этот запрос возвращает:

ID Slot Grade Type M Stat 1st Stat 2nd Stat 3rd Stat 4th Stat

7 4 normal swift spd-24 NULL NULL NULL NULL

если предложение Where равно другому идентификатору, 1-й, 2-й, 3-й, 4-й показатель может иметь значения.

ID Slot Grade Type M Stat 1st Stat 2nd Stat 3rd Stat 4th Stat

6 3 normal swift spd-24 atk-32 hp-355 NULL NULL

Извините за плохой английский .. <3

Ответ №1:

Используйте COALESCE() для фильтрации строк, в которых находятся все [X Stat] столбцы NULL :

 WHERE r.id = 7 
  AND COALESCE(r.stat01, r.stat02, r.stat03, r.stat04) IS NOT NULL
  

Комментарии:

1. @KJELYAZKOV Я отредактировал с использованием фактических имен столбцов, как они есть в таблице, а не псевдонимов.

2. да, я знаю, но … ( select r.id as Id, r.slot as Slot, rg.name as Grade, rt.name as Type, r.main_stat as Main Stat, r.stat01 as 1st Substat, r.stat02 as 2nd Substat, r.stat03 as 3rd Substat, r.stat04 as 4th Substat, case when r.isEquipted = 0 then 'FALSE' else 'TRUE' end as isEquipted` from runes r inner присоедините rune_grade rg к r.grade_id = rg.id внутреннее объединение rune_type rt на r.type_id = rt.id ГДЕ r.id = 7 И COALESCE(r.stat01, r.stat02, r.stat03, r.stat04) НЕ равен нулю;)

3. Для r.id = 7 вы не получите никаких результатов, потому что все столбцы равны НУЛЮ. Вы пробовали это для r.id = 6?

4. Нужно ли мне удалять эти столбцы из SELECT выше?

5. Ну, тогда этого не произойдет. Извините, я новичок, я этого не знал. Тем не менее, спасибо.