Выберите строку, соответствующую условию, если другие строки не соответствуют другому условию - PullRequest
3 голосов
/ 02 октября 2010

Очень простой, но не знаю, как называется этот тип запроса ... Я хочу запрос, который в основном будет делать это (псевдо-SQL):

SELECT name 
  FROM Table  
 WHERE activity_status != 'active'  
   AND there are no rows with that same name where activity_status = 'active'  

(другими словами, возвращать имена неактивных, только если не один с таким именем активен)

Это будет использоваться, чтобы дать возможность пользователям активировать неактивные элементы, но я хочу запросить в БД, чтобы убедиться, что элемент еще не активен.

1 Ответ

6 голосов
/ 02 октября 2010

Вы ищете шаблон НЕ СУЩЕСТВУЕТ.

"Для каждого неактивного имени не существует строк с тем же именем, которые активны"

SELECT name FROM Table T1
WHERE activity_status != 'active'
AND
NOT EXISTS (SELECT *
        FROM Table T2
        WHERE
            T2.activity_status = 'active' AND T1.name = T2.name)
...