div*_*rix 12 sql t-sql select join
我希望这不是重复.我检查了搜索结果,似乎无法找到明确的答案.
我有一个表,它的主键设置为a UniqueIdentifier.我还有另一个表,其中一varchar列基本上包含一个带有查询字符串的url,其中包含来自我的第一个表的guid.
所以我的2个表就像:
StateTable
StateID StateName
EB06F84C-15B9-4397-98AD-4A63DA2A238E Active
Run Code Online (Sandbox Code Playgroud)
URLTable
URL
page.aspx?id=EB06F84C-15B9-4397-98AD-4A63DA2A238E
Run Code Online (Sandbox Code Playgroud)
我正在尝试做的是连接在一起,URLTable并且StateTable值StateID包含在URL表的URL中.我还没有真正想出加入.我甚至尝试过只选择一个表并尝试按值中的值进行过滤StateTable.我尝试过这样的事情:
SELECT *
FROM URLTable
WHERE EXISTS
(SELECT *
FROM StateTable
WHERE URL LIKE '%' + StateID + '%')
Run Code Online (Sandbox Code Playgroud)
即使这样也行不通,因为它说我正在比较uniqueidentifier和varchar.
有没有办法使用like命令连接2个表,而like命令不比较2个不兼容的变量?
谢谢!!
更新:让我添加一些我应该提到的其他内容.该查询用于构建分析报告.这些表是CMS分析包的一部分......因此不能更新或更改表结构.
其次,这些表格看到的流量非常大,因为它们正在捕获网站分析......所以性能非常重要.第三件事就是在我的例子中,我说id =但是可能有多个值,例如id=guid&user=guid&date=date.
更新2:我刚才意识到的另一件事是,有时查询字符串会从GUID中删除破折号...有时候不会......所以除非我错了,否则我无法将子字符串转换为Uniqueidentifier.任何人都可以确认?叹气.我确实使用了它
REPLACE('-','',CONVERT(varchar(50), a.AutomationStateId))
Run Code Online (Sandbox Code Playgroud)
但现在我非常担心性能问题,因为URL的表非常大.这可能是野兽的本质,除非我能做任何事情.
Phi*_*hil 17
将StateID强制转换为兼容类型,例如
WHERE URL LIKE '%' + CONVERT(varchar(50), StateID) + '%'
Run Code Online (Sandbox Code Playgroud)
要么
WHERE URL LIKE N'%' + CONVERT(nvarchar(50), StateID) + N'%'
Run Code Online (Sandbox Code Playgroud)
如果URL是nvarchar(...)
编辑
正如另一个答案所指出的,这可能导致大型表的性能不佳.LIKE与CONVERT结合将导致表扫描.对于小型表,这可能不是问题,但如果性能成为问题,您应该考虑将URL拆分为两列.一列包含'page.aspx?id =',另一列包含UNIQUEIDENTIFIER.然后可以更轻松地优化您的查询.
你知道吗=会永远存在并永远是一个UNIQUEIDENTIFIER.然后你可以这样做:
WHERE CAST(SUBSTRING(URL, CHARINDEX('=',URL)+1,LEN(URL)) AS UNIQUEIDENTIFIER)=StateID
Run Code Online (Sandbox Code Playgroud)
编辑
作为评论的一部分,你也可以这样做JOIN.像这样:
select
u.*
from
urltable
join statetable s
on CAST(SUBSTRING(URL, CHARINDEX('=',URL)+1,LEN(URL)) AS UNIQUEIDENTIFIER)=StateID
Run Code Online (Sandbox Code Playgroud)
select u.* from urltable
join statetable s on url like N'%' + (convert(varchar(50),s.stateid) + N'%'
Run Code Online (Sandbox Code Playgroud)
性能可能会很糟糕
| 归档时间: |
|
| 查看次数: |
27215 次 |
| 最近记录: |