SQL Server - Поиск побитовых значений ИЛИ с помощью запроса - PullRequest
2 голосов
/ 06 октября 2011

У меня есть бизнес-требование для поиска в таблице базы данных, где один из столбцов является побитовым целым числом, и удаления базовых значений из таблицы.

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

Value
-----
1
2
16
32
33

Обратите внимание, что присутствует 33, что также 32 | 1. Что мне нужно сделать, это удалить значения 1 и 32, чтобы вернуть это:

Value
-----
2
16
33

Очевидно, что я мог бы сделать это с помощью циклических конструкций в SQL - или даже в моей бизнес-логике в C # - но мне интересно, возможно ли это вообще с помощью запроса?

Ответы [ 2 ]

2 голосов
/ 06 октября 2011

Вот запрос, который должен работать.

DELETE myTable WHERE myTable.Value in
(SELECT T1.Value
FROM myTable T1
CROSS JOIN myTable T2
WHERE T1.Value<>T2.Value AND T1.Value<T2.Value AND ((T1.Value | T2.VALUE)=T2.Value))
0 голосов
/ 06 октября 2011

Попробуйте:

with cte(Value) as (
    select 1 as Value
    union all
    select 2
    union all
    select 16
    union all
    select 32
    union all
    select 33
)

--select values to be removed
select x1.Value
from cte x1
inner join cte x2 on x1.Value <> x2.Value 
inner join cte x3 on x1.Value <> x3.Value and x2.Value <> x3.Value
where x1.Value | x2.Value = x3.Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...