Используйте оператор И только в том случае, если значение не пустое

#mysql #sql

Вопрос:

У меня есть этот sql-запрос, как сделать так, чтобы последний И оператор And um_languages.meta_value LIKE %s использовался только в том случае, если um_languages.meta_value они не пусты. Спасибо

 SELECT
    u.ID          
FROM
    wp_users u            
    INNER JOIN wp_usermeta um_key_practice          ON um_key_practice.user_id = u.id           AND um_key_practice.meta_key            = 'key_practice'
    INNER JOIN wp_usermeta um_languages             ON um_languages.user_id = u.id              AND um_languages.meta_key               = 'languages'         
    INNER JOIN wp_usermeta um_profile_type          ON um_profile_type.user_id  = u.id          AND um_profile_type.meta_key            = 'lawyer_profile_type'
    INNER JOIN wp_usermeta um_searchable            ON um_searchable.user_id  = u.id            AND um_searchable.meta_key              = 'lawyer_is_searchable'
WHERE
    um_profile_type.meta_value = 'extended' AND 
    um_searchable.meta_value = '1' AND                               

    (
        um_key_practice.meta_value = %s
        OR
        um_key_practice.meta_value = %s
            
    ) AND

         um_languages.meta_value LIKE %s AND
 

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

1. что значит пустой? пустая строка? ноль? тоже?

2. Пусто, как будто его значение равно нулю

3. (um_languages.meta_value is null or um_languages.meta_value like %s)

4. NULL amp; ПУСТОЙ может быть не тем же самым, я бы предпочел перефразировать предложение как; … значение um_languages.meta_value НЕ РАВНО НУЛЮ, И значение um_languages.meta_value > «И значение um_languages.meta_value, НАПРИМЕР «%s»

Ответ №1:

если ваш столбец уже равен нулю , оператор like проигнорирует значения null и не вернет эту строку. также вам нужно передать %s как строку

 ... 
AND um_languages.meta_value LIKE '%s'
 

но если вы хотите вернуть нулевые значения:

 ...
AND ( um_languages.meta_value LIKE '%s' or um_languages.meta_value is null)