Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2022, 11:56   #1
Parallelogram
Недотепа
Форумчанин
 
Регистрация: 18.01.2011
Сообщений: 174
По умолчанию Поиск по значению NULL

Здравствуйте.
Не могу сделать запрос поиска по числу и по NULL.

Код:
INSERT INTO `folder`
	(`id`, `sort`)
	(
	SELECT
		5,
		COALESCE((SELECT MAX(`sort`) FROM `folder` WHERE `id`=5 AND `catalogy_id`=COALESCE(
			(SELECT `ai_id` FROM `catalogy` WHERE `name`='name_catalogy' AND `id`=5 ORDER BY `ai_id` DESC LIMIT 1), NULL)
			ORDER BY `ai_id` DESC LIMIT 1), 0)
	)
Код:
INSERT INTO `folder`
	(`id`, `sort`)
	(
	SELECT
		5,
		COALESCE((SELECT MAX(`sort`) FROM `folder` WHERE `id`=5 AND `catalogy_id` IS NULL ORDER BY `ai_id` DESC LIMIT 1), 0)
	)
Код:
folder
ai_id | id | catalogy_id | sort
  1   | 5  |     13      |  0
  2   | 5  |     NULL    |  1
  3   | 5  |     13      |  1
  4   | 5  |     NULL    |  0
  5   | 5  |     NULL    |  2

catalogy
ai_id | id | name
  1   | 5  | 'name1'
  2   | 5  | 'name2'
БД - mysql
`id` - index (не AI)
`catalogy_id` - int
`catalogy_id` - может принимать значения 0|int|NULL. Значение по умолчанию NULL
catalogy.ai_id и folder.catalogy_id - внешние ключи


Я получаю `ai_id` из таблицы `catalogy` по имени 'name_catalogy'
Нахожу максимальное значение `sort` в таблице `folder` у всех у кого `catalogy_id` = 'catalogy'.'ai_id'.
У меня получается, если нахожу в `catalogy` нужный `ai_id`, но если нет, то всегда выдаёт 0. Хотя `catalogy_id` есть много со значением NULL.
Это и понятно, ведь должно быть `catalogy_id` IS NULL.
Но я не понимаю как создать такой запрос.

Я очень плохо объясняю, поэтому попроюбую перефразировать

Если нашли в `catalogy` по имени `ai_id`, ищем по этому значению в `folder` MAX(sort),
если не нашли, то ищем в `folder` по значению NULL MAX(sort)

Последний раз редактировалось Parallelogram; 22.10.2022 в 13:51.
Parallelogram вне форума Ответить с цитированием
Старый 24.10.2022, 09:25   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Поиск по значению NULL
Код:
where a =null
where a is null
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 27.10.2022, 15:34   #3
Parallelogram
Недотепа
Форумчанин
 
Регистрация: 18.01.2011
Сообщений: 174
По умолчанию

Спасибо что не вникли в суть вопроса.

У меня есть два запроса, но я не понимаю как их объединить. Если нашёл в таблице число, то ищу по нему в другой таблице. Если не нашёл в таблице число, то ищу по null в другой таблице.

Проблема в том, что условие WHERE `a` = 12 и WHERE `a` IS NULL абсолютно разные по построению. Есть какое-нибудь условие типа: WHERE `a` if (условие == NULL) {IS NULL} else { = условие}?
Parallelogram вне форума Ответить с цитированием
Старый 28.10.2022, 09:17   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Проблема в том, что условие WHERE `a` = 12 и WHERE `a` IS NULL абсолютно разные по построению. Есть какое-нибудь условие типа: WHERE `a` if (условие == NULL) {IS NULL} else { = условие}?
Код:
where (<условие> is not null and a =<условие>)
   OR  ( <условие> is null and a is null )

Код:
select * 
from t
left join s on t.num =s.num 

where s.num ='5' --Если нашёл в таблице число, то ищу по нему в другой таблице( см. join выше).
or 
   ( s.num is null and t.r is null ) -- Если не нашёл в таблице число, то ищу по null в другой таблице.
s -- таблица с числами
t -- другая таблица

быть может ?.. s.num ='5' s.num is not null
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 28.10.2022 в 09:35.
evg_m вне форума Ответить с цитированием
Старый 29.10.2022, 06:22   #5
Parallelogram
Недотепа
Форумчанин
 
Регистрация: 18.01.2011
Сообщений: 174
По умолчанию

Помог CASE..WHEN..THEN
Parallelogram вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск по значению в TextBox maxvip Microsoft Office Excel 9 06.06.2014 16:25
XML DOM Поиск элемента по значению Spot Общие вопросы Delphi 3 21.02.2013 09:50
Поиск и выбор в DBGrid по значению biohazardo БД в Delphi 2 28.04.2011 15:03
Формула в Экселе, поиск по значению... Илья Николаевич Microsoft Office Excel 14 15.07.2010 20:10
Поиск по значению OgE®_M@G Microsoft Office Excel 3 23.02.2010 06:33