Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Сломал голову на ситуации (Abyrvalg) 21/02/2014 - 23:56:24
      Re: Сломал голову на ситуации (Akina) 22/02/2014 - 13:21:16
      Re: Сломал голову на ситуации (Abyrvalg) 22/02/2014 - 15:50:34
      Re: За чё спасиба-то? (Akina) 23/02/2014 - 21:32:56
      Re: Сломал голову на ситуации (Ar) 06/06/2014 - 15:14:51



From: Abyrvalg - 21/02/2014 - 23:56:24
Subject:Сломал голову на ситуации
-----------------
Привет тебе, неустрашимый All!

Вводная:
*) Есть табличка с двумя полями. Для простоты будем считать, что в первом поле - число, во втором - дата.
*) Оба поля неуникальны.
*) Притом второе поле может применять значение null. Но только единожды для каждого значения первого поля. Будем считать, к примеру, что поле f2 - это дата закрытия аренды некоего волшебного номера f1. Если для заданного f1 существует значение f2 = NULL, значит, данный f1 используется. Если же все значения f2 для него ненулевые, то значит, данный f1 использовался N раз (N = числу рядов) и в данный момент не используется.

Пример такой таблицы test с полями f1, f2:

5 2014-01-01
8 2014-02-02
8 2014-02-20
10 2013-12-16
10 NULL
12 2013-12-23
12 2014-01-30
12 NULL
и т.п.

Задача найти все "активные" f1 элементарна: для этого надо всего лишь выселектить те значения, у которых f2 = NULL:

SELECT f1 FROM test WHERE f2 IS NULL

А вот обратная задача - найти все "неактивные" f1 - заставила меня залипнуть. В конце концов, конечно, можно извратиться вложенным запросом "от противного":

SELECT f1 FROM test WHERE f1 NOT IN (SELECT f1 FROM test WHERE f2 IS NULL)

но не оставляет тревожное ощущение корявости и уродливости этой конструкции. Такое ощущение, что есть что-то гораздо более изящное и правильное, а я проглядел...

Подскажите, пожалуйста, развейте сомнения...


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
43150



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |