当前位置: 首页 > 面试题库 >

在like语句上联接SQL Server表

裴硕
2023-03-14
问题内容

我希望这不会重复。我已经检查了搜索,但似乎找不到明确的答案。

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

所以我的2张桌子就像:

状态表

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

网址表

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

我想做的是连接在一起,URLTable然后在URL表的URL中包含StateTableon的值StateID。我还没有真正弄清楚这个加入。我什至尝试只选择一个表并尝试按中的值进行过滤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。这样,您的查询就可以更加轻松地优化。



 类似资料:
  • 问题内容: 我有一个在MySQL中运行良好的查询,但是在Oracle上运行该查询时,出现以下错误: SQL错误:ORA-00933:SQL命令未正确终止 00933。00000-“ SQL命令未正确终止” 查询是: 问题答案: 该语法在Oracle中无效。你可以这样做: 或者您 可以 执行以下操作: 它取决于内联视图是否被Oracle更新( 要更新第二条语句取决于 此处 列出的一些规则 )。

  • 问题内容: 我目前正在制作一份报告,向我显示我们销售团队涵盖的所有邮政编码。 每个团队涵盖100多个邮政编码。我想做的是创建一个报告,将邮政编码内的客户带回去。目前,我的代码如下所示。 我希望的是有一种更快,更轻松的方式来做到这一点。任何建议将不胜感激。有没有一种方法可以为每个销售团队创建变量,例如 只是在钓鱼的想法。干杯 问题答案:

  • 问题内容: 问题 表格1: 表2: 表3: 给定键(A1或A2),我需要使用表2中的相应值更新表1中的DataColumn1和DataColumn2列。 因此,table1可以更新x个行,如上面的数据所示。如果我要更新A1,则01和02行都应更新 (因此,表01中的值对于键01和键02的datacolumn1分别为0.15和1.2(对于datacolumn2)) 到目前为止我尝试过的是: 问题:

  • 问题内容: 首先,我正在使用Oracle: 表一名称= 表二名称= 有一个名为的列,有一个名为的列。我想加入到其中,是在某个地方的名字。 我试过的 如何更正此查询? 问题答案: 尝试使用以下语法: Oracle的字符串连接运算符是双管道(||)。无效数字错误是因为Oracle需要’+’运算符的数字操作数。

  • 问题内容: 我不知道是什么问题。使用MySQL 5.0尝试运行以下MYSQL更新语句时出现编译错误 所有字段名称都是正确的。有什么想法吗? 问题答案: 尝试这个: 更新: 既然您说查询产生了语法错误,所以我创建了一些可以对其进行测试的表,并确认查询中没有语法错误: 看到?没有语法错误。我针对MySQL 5.5.8进行了测试。

  • 是否有可能基于“if”“like”语句或xslt中的等价物写出xml? 我有一个名为“cust_code”的元素,如果该元素以“HE”开头,那么我想把它写出来,否则跳到下一个。 可能吗?