2016-10-10 5 views
0

Из следующей таблицы вы хотите запросить пользователя, у которого нет свойства «бета_узера» или «бета_редактора», но имеет любое другое свойство.SQL, чтобы найти пользователя, который не имеет определенного свойства

UserID  | Property 
-----------|----------- 
user 1  | beta_member 
user 1  | beta_redirect 
user 1  | member 
user 2  | beta_member 
user 2  | member 
user 3  | beta_redirect 
user 3  | member 
user 4  | member 

Я хочу получить только пользовательский 4 как выход.

ответ

1

Вам нужно Group By и Having Статья

select UserID 
from Yourtable 
Group by UserID 
Having Count(case when Property in ('beta_user' ,'beta_redirect') then 1 end) = 0 

Другой подход с использованием NOT EXISTS

SELECT * 
FROM Yourtable a 
WHERE NOT EXISTS (SELECT 1 
        FROM Yourtable b 
        WHERE a.UserID = b.UserID 
          AND b.Property IN ('beta_user', 'beta_redirect')) 

Примечание: Даже user 2 не 'beta_user' или 'beta_redirect' свойство

+0

Это было полезно. Thnx. –

1

вы можете использовать not in, а также -

SELECT * 
FROM <table-name> 
WHERE UserID not in (SELECT UserID  
        FROM <table-name> 
        WHERE Property IN ('beta_user', 'beta_redirect')) 
+1

Нам нужно иметь в виду, что 'NOT IN' будет терпеть неудачу, если в столбце' UserID' присутствует любое значение NULL. –

+0

Вот почему я всегда использую «НЕ СУЩЕСТВУЮЩИЕ» - это «нуль-сейф»! – jarlh

+0

Это было полезно. –

 Смежные вопросы

  • Нет связанных вопросов^_^