sql - SQL - 需要基于两个整数列的附加唯一标识符列的解决方案
问题描述
当我在 SELECT 语句中加入两个表时,我在结果集中的第 1 列中得到了一些重复项,如下所示:
| ID1 | ID2 |
| 12 | 34 |
| 12 | 4 |
| 123 | 1 |
| 123 | 4 |
但是 ID1、ID2 的组合在我的结果集中总是唯一的。
我需要有一个单独的列来唯一标识整个结果集,无论我何时执行选择,ID1、ID2 的每个组合都会产生相同的新标识符。我不允许使用临时表,显然像ROW_NUMBER ()这样的技巧在结果集上也不起作用,因为在两个表中的一些表得到更新后,它们可能会为 ID1、ID2 的相同组合生成不同的标识符。
我尝试了将 select 语句中的两个整数连接成一个整数的技术,如下所示:
SELECT ID1, ID2,
CAST(CONCAT(CAST(ID1 AS nvarchar(100)), CAST(ID2 AS nvarchar(100))) AS INT) AS Identifier
但它也不能解决问题,因为现在不同的组合可能会得到相同的标识符:
'12' + '34' = '1234'
'123' + '4' = '1234'
我需要有类似的东西:
| ID1 | ID2 | Identifier |
| 12 | 34 | 1 |
| 12 | 4 | 2 |
| 123 | 1 | 3 |
| 123 | 4 | 4 |
当其中一个表从另一个表中获得对应于 ID = 12 的新行时,之前定义的标识符将保持不变,如下所示:
| ID1 | ID2 | Identifier |
| 12 | 34 | 1 |
| 12 | 4 | 2 |
| 12 | 2 | 578 |
| 123 | 1 | 3 |
| 123 | 4 | 4 |
也就是说,无论何时执行 SELECT 语句,整数 ID1、ID2 的每个组合都会产生相同的新标识符。我将如何创建该标识符列以满足我的需求?
解决方案
如果您事先知道这些整数的最大值,那么您可以使用算术。
假设它们的范围从 0 到 999,那么:
id1 * 1000 + id2 as identifier
推荐阅读
- python - 调用 PutObject 操作时发生错误 (404):未找到
- node.js - 如何解决 Nodemailer 中的 ENETUNREACH 错误
- image - VueJS 中的动态名称路由/动态路由匹配
- c# - 使用 JWT 非对称 RSA 密钥的 .Net Core 身份验证失败 - IDX10609:解密失败。未尝试任何键:令牌
- c# - 检查目录C#中执行的文件
- javascript - 根据嵌套数组中的值过滤数组
- c++ - 运行时错误:引用绑定到“int”类型的空指针 (stl_iterator.h)
- php - 确定产品属于什么类别并显示图像。- 如何清理这个 PHP 代码?
- android-studio - 有没有办法让颤振小部件违反脚手架填充?
- javascript - 我怎样才能把这个伪代码翻译成 React/javascript?