【发布时间】:2012-04-18 15:49:09
【问题描述】:
我希望这不是重复。我检查了搜索,但似乎找不到明确的答案。
我有一个表,它的主键设置为UniqueIdentifier。我还有另一个表,它有一个 varchar 列,该列基本上包含一个带有查询字符串的 url,该查询字符串包含我的第一个表中的 guid。
所以我的 2 个表是这样的:
状态表
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。
有什么方法可以使用 like 命令连接 2 个表,并且 like 命令不比较 2 个不兼容的变量?
谢谢!!
更新:让我添加一些我应该提到的其他内容。该查询用于构建分析报告。这些表是 CMS 分析包的一部分......因此更新或更改表结构不是一种选择。
其次,这些表会看到非常高的流量,因为它们正在捕获站点分析......所以性能是一个非常重要的问题。第三件事是,在我的示例中,我说的是 id= 但可能有多个值,例如id=guid&user=guid&date=date。
更新 2:我刚刚意识到的另一件事让我感到恐惧的是,有时查询字符串从 GUID 中删除了破折号.. 有时没有.. 所以除非我弄错了,否则我不能将子字符串转换为Uniqueidentifier。有人可以确认吗?sigh。我确实使用了
REPLACE('-','',CONVERT(varchar(50), a.AutomationStateId))
但现在我非常担心这方面的性能问题,因为 URL 的表非常大。不过,这可能是野兽的本性,除非我能做些什么。
【问题讨论】: