(SQL-T-SQL) Выберите команду, чтобы иметь только определенные значения?

#sql #tsql #sqltransaction

#sql #tsql #sqltransaction

Вопрос:

Вот моя таблица app_extra:

AppID;AppExtraID
100;0
100;1
100;3
100;7
100;8
100;9
110;0
110;2
110;4
110;7
110; 9
115;0
115;2
115;6
115;8
115;8
120;0
120;1
120; 10
130;0
130;7
130;8
130;10
140;0
140;1В 140;3
150;0
150;2
150;6
150;7
150;8
150;10
160;0
160;8
160;10
165;0
165;8
165;10
170;0
170;2
170;8
170;10
180;0
180;1
180;5
180;7
180;10
185;0
185;1
185;7
185;10
190;0
190;2

Я хотел бы знать, как иметь только AppID, у которого нет 9 и 10 AppExtraID

Спасибо!

Ответ №1:

Я понимаю, к чему вы клоните…

 SELECT DISTINCT AppID
FROM app_extra 
WHERE AppID NOT IN 
  (SELECT DISTINCT AppID from app_Extra 
   WHERE AppExtraID IN (9, 10))
  

Внутренний выбор определит все идентификаторы приложений, которые имеют 9 или 10 дополнительных. Затем эти строки будут исключены из основного выбора. Любой AppID, связанный с 9 или 10, будет удален, даже если у них также есть другой дополнительный идентификатор.

Комментарии:

1. Это приведет к получению записей, в которых отсутствуют только 9 или 10, а не те, в которых отсутствуют оба.

2. Это должно привести ко всем записям, которые не имеют ни 9, ни 10.

Ответ №2:

 select distinct AppId
from app_extra
where AppExtraID not in (9, 10)
  

Изменено в соответствии с пожеланиями вашего комментария.

Комментарии:

1. Опередите меня. Отличные примеры.

2. Нет, это приведет только к удалению строк, содержащих 9 или 10. Я хочу, чтобы команда T-SQL имела только идентификаторы, у которых нет 9 или 10.

3. @MartinGemme Я изменил свой ответ. Это даст вам то, что вам нужно.

4. @Martin — Вы запросили запрос, который возвращает все строки, в которых AppExtraID НЕ равен 9 или 10. Это то, что они вам дали. Пожалуйста, уточните свой запрос, если это не то, что вы хотели.

Ответ №3:

Чтобы получить уникальный список AppID , которые удовлетворяют требованию:

 SELECT AppID 
FROM   tbl
WHERE  AppExtraID NOT IN (9, 10)
GROUP  BY 1
  

Ответ №4:

 SELECT DISTINCT AppID FROM app_extra WHERE AppExtraID NOT IN(9,10)
  

Комментарии:

1. Нет, это приведет только к удалению строк, содержащих 9 или 10. Я хочу, чтобы команда T-SQL имела только идентификаторы, у которых нет 9 или 10.