gpt4 book ai didi

sql - 在类似语句上加入 SQL Server 表

转载 作者:行者123 更新时间:2023-12-04 00:19:46 24 4
gpt4 key购买 nike

我希望这不是重复。我检查了搜索,我似乎无法找到明确的答案。

我有一个表,它的主键设置为 UniqueIdentifier .我还有一张 table ,上面有 varchar列基本上包含一个带有查询字符串的 url,其中包含我的第一个表中的 guid。

所以我的 2 个表是这样的:

状态表

StateID                                  StateName
EB06F84C-15B9-4397-98AD-4A63DA2A238E Active

网址表
URL
page.aspx?id=EB06F84C-15B9-4397-98AD-4A63DA2A238E

我想做的是联合起来 URLTableStateTable ON的值 StateID包含在 URL 表的 URL 中。我还没有真正弄清楚加入。我什至尝试只选择一张表并尝试按 StateTable 中的值进行过滤.我试过做这样的事情:
SELECT  *
FROM URLTable
WHERE EXISTS
(SELECT *
FROM StateTable
WHERE URL LIKE '%' + StateID + '%')

即使这样也行不通,因为它说我正在比较 uniqueidentifiervarchar .

有没有办法使用 like 命令连接 2 个表,并且 like 命令不比较 2 个不兼容的变量?

谢谢!!

更新:让我添加一些我应该提到的其他内容。该查询用于构建分析报告。这些表是 CMS 分析包的一部分......所以更新或更改表结构不是一种选择。

其次,这些表看到了非常高的流量,因为它们正在捕获站点分析……所以性能是一个非常大的问题。第三件事是,在我的示例中,我说的是 id= 但可能有多个值,例如 id=guid&user=guid&date=date .

更新 2:我刚刚意识到的另一件事是,有时查询字符串会从 GUID 中删除破折号......有时不会......所以除非我弄错了,否则我不能将子字符串转换为 Uniqueidentifier . 有人能确认吗?叹气。我确实让它工作了
REPLACE('-','',CONVERT(varchar(50), a.AutomationStateId))

但现在我非常担心这个的性能问题,因为 URL 的表非常大。不过,这可能是野兽的本性,除非我能做些什么。

最佳答案

将 StateID 转换为兼容类型,例如

WHERE URL LIKE '%' + CONVERT(varchar(50), StateID) + '%'


WHERE URL LIKE N'%' + CONVERT(nvarchar(50), StateID) + N'%'

如果 URL 是 nvarchar(...)

编辑

正如另一个答案中指出的那样,这可能会导致大型表的性能不佳。
LIKE 与 CONVERT 结合将导致表扫描。对于小表,这可能不是问题,但如果性能成为问题,您应该考虑将 URL 拆分为两列。一列将包含“page.aspx?id=',另一列包含 UNIQUEIDENTIFIER。然后可以更轻松地优化您的查询。

关于sql - 在类似语句上加入 SQL Server 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10019557/

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