【问题标题】:TSQL List all the constituent bitwise integers within a larger integerTSQL 列出一个较大整数中的所有组成位整数
【发布时间】:2019-05-20 14:26:37
【问题描述】:

首先,很抱歉在这里没有使用正确的术语。我实际上并不知道正确的术语,因此很难找到解决方案。请接受我的示例作为问题,如果有人可以启发我(或删除并阅读存在的实际解决方案),我会相应地更新问题。

到目前为止,我的研究仅对整体中的单个位进行比较,而不是显示所有

给定一组整数:

ELEMENT   
-----------
Bricks    1
Plaster   2
Cement    4
Concrete  8

我有一个结果集,提供了这些材料的使用方式:

MIXTURE     ELEMENTS
----------------------
MixtureFoo  3
MixtureBar  7
MixtureBaz  11

我需要展示最终的混合物集,但要列出在相应混合物中使用的每个组成元素

MIXTURE     ELEMENTS   ELEMENT
------------------------------
MixtureFoo  3          1
MixtureFoo  3          2
MixtureBar  7          1
MixtureBar  7          2
MixtureBar  7          4
MixtureBaz  11         1
MixtureBaz  11         2
MixtureBaz  11         8

【问题讨论】:

  • 我假设您实际上并未设计此数据库,但如果可能,请考虑将设计更改为不使用位掩码。除了明显的维护问题(永远不能超过 64 个部分,值需要始终正确构造/解构),正如您所发现的那样,它们也不是要查询的野餐(这些查询也不是很快,通常)。将混合与元素链接的适当中间表允许自然连接(可以显式添加诸如“元素只能出现一次”之类的约束)。
  • 是的,这个问题的发布是出于正是您指定的原因。迁移已经开始!

标签: sql-server tsql sql-server-2012 bitwise-operators


【解决方案1】:

您可以使用按位运算:

SELECT *
FROM t
JOIN ELEMENT e
  ON t.ELEMENTS & e.w = e.w
ORDER BY MIXTURE, w;

db<>fiddle demo

【讨论】:

  • 简直太棒了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 2019-05-16
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
  • 2022-03-24
相关资源
最近更新 更多