#mysql #select #null #where #sql-like
#mysql #выберите #null #where-предложение #sql-подобный
Вопрос:
У меня есть таблица биографических данных, и мне нужно выполнить запрос, который выбирает людей, в биографии которых есть слово «умер» и дата смерти которых равна НУЛЮ. Это не сработает:
SELECT * FROM people
WHERE bio LIKE '%died%'
AND death_date IS NULL
Это выбирает всех, чья дата смерти равна нулю, но также выбирает людей, в биографии которых нет слова «умер». Могу ли я сделать это в одном запросе?
Комментарии:
1. Вы уверены, что он возвращает людей, у которых в биографии нет «умерших»? Помните, что он также будет включать слова, содержащие dead, такие как изученный и внедренный.
2. поделитесь образцами данных, которые ведут себя следующим образом.
Ответ №1:
Это может быть слово типа ‘completelydied’, и они все равно будут выбраны. Внимательно проверьте, не существует ли фразы ‘died’ как части какого-либо слова в выбранных вами записях.
Комментарии:
1. Не забывайте, что добавление пробела перед «умер» не сработает, если это слово находится в начале биографии.
Ответ №2:
Возможно, проблема в кавычках, используйте » вместо «, чтобы заключить предложение LIKE.
SELECT * FROM people
WHERE bio LIKE "%died%"
AND death_date IS NULL
Комментарии:
1. Выполнение запроса подобным образом возвращает те же результаты.
2. К какому типу данных относится поле «bio»?
Ответ №3:
я бы посоветовал вам сделать биографию заглавной и иметь что-то вроде «%DIED%», также убедитесь, что death_date действительно равно нулю, посмотрите, получите ли вы ответ из обоих случаев where независимо. Какой ответ вы получаете?
Комментарии:
1. Использование WHERE death_date РАВНО NULL само по себе возвращает пользователей, у которых death_date равно NULL.
2. о чем? ГДЕ ВЕРХНИЙ (биография) НАПРИМЕР, ‘%DIED%’