Исключить строки со столбцом, содержащим значение, если для - PullRequest
2 голосов
/ 12 января 2012

Таблица имеет

User   Value
john   284
john   200
john   5
sally  245
sally  180
sally  10
bill   90
bill   1000
bill   284
greg   10
greg   90
greg   2000

Если пользователь имеет значение 284, например, то я хочу, чтобы набор результатов не включал его Я не уверен, как проверить все строки пользователя, чтобы увидеть, если есть значение 284, а затем не показать этого пользователя в наборе результатов, если оно там. Набор результатов должен быть отличным.

Конечный набор результатов должен быть

User
greg
sally

Ответы [ 4 ]

8 голосов
/ 12 января 2012

Использование not exists:

select distinct
    user
from
    users u
where
    not exists (
       select
           1
       from
           users u2
       where
           u2.user = u.user
           and u2.value = 284
    )

Для этого он извлекает всех пользователей из таблицы users, где у них нет строки со значением 284 в users Таблица.Вы также можете сделать exists как обратное (найти только пользователей со значением 284).

Кроме того, используйте distinct на select, чтобы ограничить возвращаемых пользователями их уникальные значения.

5 голосов
/ 12 января 2012
    Select distinct User from table
    where User not in ( Select User from table
    where value =284)
0 голосов
/ 21 июня 2018

Вы можете использовать группу по пользователю, а также подсчитать, сколько пользователей со значением! = 284

Вот SQL

Select   `User`
,count(*)- SUM(CASE WHEN `Value` != 284 THEN 1 ELSE 0 END) 284Val
from table
group by `User`
having 284Val = 0;
0 голосов
/ 12 января 2012

Другой вариант - самостоятельное соединение:

SELECT DISTINCT u1.[User]
FROM users u1
LEFT OUTER JOIN users u2 ON u2.[User] = u1.[User] AND u2.Value = 284
WHERE u2.[User] IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...