MySQL Выберите с помощью LIKE и WHERE

#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%’