Как я могу сделать SQL JOIN путем побитового манипулирования оператором? - PullRequest
0 голосов
/ 21 сентября 2018

У нас есть база данных SQL Server 2014, содержащая две таблицы:

enter image description here

enter image description here

В таблице деталей BitColours - это побитовое число, ссылающееся на строки из таблицы цветов.

нас попросили создать такой запрос:

enter image description here

Я никогда раньше не совершал такого рода манипуляций, поэтому буду признателен за любые рекомендации.

Спасибо

1 Ответ

0 голосов
/ 21 сентября 2018

Вы можете попытаться соединить две таблицы с помощью AND побитового оператора (&).

Запрос 1 :

SELECT
    p.id,
    p.part,
     STUFF((
          SELECT ',' + c.Colour
          FROM colours c
          WHERE c.BitId & p.BitColurs > 0
          FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') colours
FROM parts p 

Результаты :

| id |   part |     colours |
|----|--------|-------------|
|  1 | abc123 |    Red,Blue |
|  2 | xyt788 | Black,Green |

Объяснить

& И побитовый оператор И будет сравнивать два двоичных значения из двух.

например:

BitColor равно 3 = 00011.

вот пример, я игнорирую много нулей после двоичного числа 16.

Красный

    00011
---------------------
(&) 00001 = Red (1)
---------------------
    00001 = (1)

Синий

    00011
---------------------
(&) 00010 = Blue (2)
---------------------
    00010 = (2)

Черный

    00011
---------------------
(&) 00100 = Black (4)
---------------------
    00000 = (0)

Зеленый

    00011
---------------------
(&) 01000 = Green (8)
---------------------
    00000 = (0)

Таким образом, мы можем использовать BitId & BitColurs Выполните вычисление в двоичном виде и получите результат, значение которого больше 0. Вы можете получить значение.

...