Я хочу запустить родительский выбор только в том случае, если подзапрос не равен нулю. Не знаете, как этого добиться с помощью sql-запроса: -
SELECT * from schools
WHERE `district_id` =
(SELECT district_id from schools WHERE `school_id` = '0023194')
если SELECT District_id из школ WHERE school_id = '0023194' возвращает null, я получаю каждую строку из школ
Если SELECT District_id из школ WHERE school_id = '0023194' возвращает идентификатор, я получаю строки с этим идентификатором района
Проверить SELECT COALESCE - w3schools.com/sql/func_sqlserver_coalesce.asp
Если подзапрос имеет значение NULL, операция = не может быть истинной (даже если district_id также имеет значение NULL), и родительский запрос не возвращает строки. Значит, он уже делает то, что вы хотите, не так ли?
он возвращает все строки, у которых нет значения District_id, и это то, чего я хочу избежать
Итак, SELECT District_id из школ WHERE school_id = '0023194' возвращает null, затем SELECT * из школ WHERE district_id = null возвращает строки без идентификаторов округов. Я не хочу этого. Я бы хотел, чтобы внешний запрос запускался, если подзапрос возвращает значение, а не нуль
Я очень сомневаюсь, что, поскольку NULL = NULL не соответствует действительности, ни одна строка не удовлетворяет этому условию, и внешний запрос не возвращает ни одной строки, а не всех. По крайней мере, так должно быть. Можете ли вы создать скрипку, которая показывает противоположное поведение, о котором вы заявляете?
Подождите ... У вас нет строки 'NULL' в этом столбце, не так ли? Или пустая строка? Потому что это не значения NULL и объясняют описываемое вами поведение ... В этом случае очистите данные и используйте (настоящий) NULL вместо этих строк.
@stickybit Sonofabitch! пустая строка. Благодарность
@SamLuther Если у вас пустая строка, я думаю, что указанное поведение по-прежнему не ожидается.
@ Md.SumanKabir, вы правы, я удалил пустую строку, проблемы остались прежними
@SamLuther Зайдите в мой Скрипка и создайте проблему.
@ Md.SumanKabir спасибо, но у stickybit все было правильно. использование (настоящего) NULL помогло






вы должны запустить свой sql-запрос, например ...
SELECT * from schools
WHERE `district_id` =
(SELECT district_id from schools
WHERE `school_id` = '0023194'
AND
district_id IS NOT NULL)
AND district_id IS NOT NULL
district_id IS NOT NULL to prevent district_id not null
Не то, что я ищу, этот запрос возвращает то же количество строк, что и SELECT * из школ WHERE district_id = (SELECT District_id из школ WHERE school_id = '0023194')
Кажется, вам просто нужно использовать IN, как показано ниже:
SELECT * from schools
WHERE `district_id` in
(SELECT district_id from schools WHERE `school_id` = '0023194')
Я пробовал это, нет, по-прежнему возвращает строки с District_id, которые равны нулю
Кажется, что-то не так с вашей базой данных! Проверьте скрипку и создайте проблему, с которой вы столкнулись. sqlfiddle.com/#!9/9440a2/2
Вы можете использовать оператор IN, потому что оператор IN позволяет указать несколько значений в предложении WHERE.
Оператор IN - это сокращение для нескольких условий ИЛИ. В вашем условии = сравнивает только одно условие, но если у вас есть несколько записей этого school_id, = не может его оценить.
SELECT * from schools WHERE `district_id` in (SELECT district_id from schools WHERE `school_id` = '0023194')
Это то, что делает ваш запрос. Полезны образцы данных и желаемые результаты.