加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:24:43 所属栏目:MsSql教程 来源:网络整理
导读:我希望这不是重复.我检查了这些搜索,我似乎找不到一个明确的答案. 我有一个表,它的主键设置为一个UniqueIdentifier.我还有另一个表有一个varchar列,它基本上包含一个包含查询字符串的url,该查询字符串包含我第一个表中的guids. 所以我的2张表就像: StateTabl
我希望这不是重复.我检查了这些搜索,我似乎找不到一个明确的答案.

我有一个表,它的主键设置为一个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.您的查询可以更容易地进行优化.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读