gpt4 book ai didi

SQL 服务器 : join on uniqueidentifier

转载 作者:行者123 更新时间:2023-12-04 15:50:40 26 4
gpt4 key购买 nike

我有两个表BackupRequests

下面是两个表的脚本

备份

CREATE TABLE UserBackup(
FileName varchar(70) NOT NULL,
)

文件名由 guid 表示。有时会有一些与文件相关的附加信息。因此,我们在表中输入了类似 guid_ADD 的条目。

请求

CREATE TABLE Requests(
RequestId UNIQUEIDENTIFIER NOT NULL,
Status int Not null
)

以下是一些示例行:

UserBackup 表:

FileName
15b993cc-e8be-405d-bb9f-0c58b66dcdfe
4cffe724-3f68-4710-b785-30afde5d52f8
4cffe724-3f68-4710-b785-30afde5d52f8_Add
7ad22838-ddee-4043-8d1f-6656d2953545

请求表:

RequestId                              Status
15b993cc-e8be-405d-bb9f-0c58b66dcdfe 1
4cffe724-3f68-4710-b785-30afde5d52f8 1
7ad22838-ddee-4043-8d1f-6656d2953545 2

我需要从 userbackup 表中返回所有行,这些行的名称(guid)与 Requests 表中的 RequestId 匹配且状态为 1。所以在这里是我写的查询

Select * 
from UserBackup
inner join Requests on UserBackup.FileName = Requests.RequestId
where Requests.Status = 1

这很好用。它返回以下结果

FileName                                      RequestId                              Status
15b993cc-e8be-405d-bb9f-0c58b66dcdfe 15b993cc-e8be-405d-bb9f-0c58b66dcdfe 1
4cffe724-3f68-4710-b785-30afde5d52f8 4cffe724-3f68-4710-b785-30afde5d52f8 1
4cffe724-3f68-4710-b785-30afde5d52f8_Add 4cffe724-3f68-4710-b785-30afde5d52f8 1

这正是我想要的。但我不明白的是它是如何工作的。如果您注意到结果也返回 4cffe724-3f68-4710-b785-30afde5d52f8_Add 行。内部联接在 varcharuniqueidentifier 上,此联接不像“等于”比较那样工作,而是像“包含”比较那样工作。我想知道这是如何工作的,以便我可以确保在没有任何意外情况的情况下使用此代码。

最佳答案

比较两边的值必须是相同数据类型。没有诸如比较 uniqueidentifiervarchar 这样的事情。

uniqueidentifier有一个higher precedencevarchar因此 varchar 将在比较发生之前转换为 uniqueidentifier

不幸的是,如果字符串包含的字符多于需要的字符,您不会收到任何错误或警告:

select CONVERT(uniqueidentifier,'4cffe724-3f68-4710-b785-30afde5d52f8_Add')

结果:

4CFFE724-3F68-4710-B785-30AFDE5D52F8

如果你想强制在字符串之间进行比较,你必须执行显式转换:

Select * 
from UserBackup
inner join Requests
on UserBackup.FileName = CONVERT(varchar(70),Requests.RequestId)
where Requests.Status = 1

关于SQL 服务器 : join on uniqueidentifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22841229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com