Фильтрация нескольких строк в SQL Server - PullRequest
0 голосов
/ 26 мая 2018

Это моя таблица:

ori table

FilterID - это критерий, по которому будут фильтроваться строки.Однако, если одна строка соответствует критериям, я хочу удалить все строки с одинаковым staffID.Например, если для FilterID установлено значение 50 или 88. Я хочу отфильтровать все строки «james».

Таким образом, мой вывод будет:

output table

Не мог придумать элегантный способ справиться с этим.

Ответы [ 3 ]

0 голосов
/ 26 мая 2018

Это так просто, как это:

declare @my_table table (
  filteredID int,
  staffID int,
  Name varchar(30)
);

insert into @my_table values
  (50, 205, 'james'),
  (88, 205, 'james'),
  (57, 16371, 'jake'),
  (55, 16371, 'jake'),
  (83, 20817, 'jane'),
  (87, 20924, 'jason'),
  (49, 21074, 'jackson'),
  (42, NULL, 'Foo'),
  (170, NULL, 'Goo');

declare @filteredID int = 50;

delete from @my_table
where staffID in (
  select staffID
  from @my_table
  where filteredID = @filteredID
);

select staffID, Name from @my_table;
0 голосов
/ 26 мая 2018

Предполагая, что staffID является необнуляемым столбцом, вы можете просто достичь его с помощью подзапроса

DECLARE @filteredID INT
SET @filteredID = 50 --Or another value

DELETE FROM TABLE_NAME
WHERE
(
    staffID IN (SELECT staffID FROM TABLE_NAME WHERE filteredID =@filteredId)
);

SELECT * FROM TABLE_NAME
0 голосов
/ 26 мая 2018

Самый простой способ достижения этого результата - использовать оператор not in, в котором предложение

select 
    staffID, Name 
from 
    Staff 
where 
    staffID not in (select staffID from Staff where filteredID = 50) 
order by 
    staffID;
...