在类似的语句上加入SQL Server表

前端之家收集整理的这篇文章主要介绍了在类似的语句上加入SQL Server表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望这不是重复.我检查了这些搜索,我似乎找不到一个明确的答案.

我有一个表,它的主键设置为一个UniqueIdentifier.我还有另一个表有一个varchar列,它基本上包含一个包含查询字符串的url,该查询字符串包含我第一个表中的guids.

所以我的2张表就像:

StateTable

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

URLTable

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

我想要做的是将URLTable和StateTable连接在一起,StateID的值包含在URL表的URL中.我没有真正想出加入.我甚至尝试只选择一个表,并试图通过StateTable中的值进行过滤.我试过这样做:

SELECT  *
FROM URLTable
WHERE     EXISTS
    (SELECT  *
     FROM  StateTable
     WHERE URL LIKE '%' + StateID + '%')

即使这不工作,因为它说我正在比较uniqueidentifier和varchar.

有没有办法使用类似的命令连接2个表,哪个类似的命令不比较2个不兼容的变量?

谢谢!!

更新:让我添加一些额外的事情,我应该提到.该查询是为了构建分析报告的目的.这些表是CMS分析软件包的一部分…因此更新或更改表结构不是一个选项.

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

更新2:我只是意识到我的恐怖的另一件事是,有时查询字符串从GUID ..删除的破折号..有时不是..所以除非我“错误,我不能将子串转换为唯一标识符.有人确认了,叹了一口气,我确实让它工作了

REPLACE('-','',CONVERT(varchar(50),a.AutomationStateId))

但是现在我非常担心性能问题,因为URL的表格非常大.这可能是野兽的本质,除非有什么可以做的.

解决方法

将StateID转换为兼容类型,例如
WHERE URL LIKE '%' + CONVERT(varchar(50),StateID) + '%'

要么

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

如果网址是nvarchar(…)

编辑

正如在另一个答案中指出的,这可能会导致大型桌面的性能不佳.LIKE与CONVERT组合将导致表扫描.这可能不是小表的问题,但如果性能成问题,您应该考虑将URL分为两列.一列会包含“page.aspx?id =”,另一列包含UNIQUEIDENTIFIER.您的查询可以更容易地进行优化.

猜你在找的MsSQL相关文章