gpt4 book ai didi

sql - 应用于多个列的相同 LIKE 条件

转载 作者:行者123 更新时间:2023-12-05 00:55:55 27 4
gpt4 key购买 nike

我有一个连接几个表的 SQL 查询,我想对结果集中的许多列使用相同的 LIKE 条件来过滤记录。例如,我的查询中有列 t1.Name、t1.FullName、t1.Comment、t2.Name、t3.Description 等(t1、t2 和 t3 是连接的表名),我想检查 t1.Name 是否或 t1.FullName 或 t1.Comment 或 t2.Name 或 t3.Description 类似于“%sometext%”。我只是感兴趣什么 SQL 会更快?

WHERE t1.FullName LIKE '%sometext%' OR t1.Comment LIKE '%sometext%' OR
t2.Name LIKE '%sometext%' OR t3.Description LIKE '%sometext%'

WHERE ISNULL(t1.Name,'') + '|' + ISNULL(t1.FullName,'') + '|' + ISNULL(t1.Comment,'') + '|' + ISNULL(t2.Name,'') + '|' + ISNULL(t3.Description,'') LIKE '%sometext%'

或者可能有一些更快的方法?我正在使用 MS SQL Server 2008 R2。

UPD:我已经编辑了我的第二个查询以处理某些字段为 NULL 以及连接可能包含模式但单独的字段不包含的情况。

最佳答案

我会这样写:

WHERE t1.FullName LIKE '%sometext%' OR t1.Comment LIKE '%sometext%' OR
t2.Name LIKE '%sometext%' OR t3.Description LIKE '%sometext%'

不使用后者的几个原因,更快 甚至没有发挥作用:

  1. String summary statistics可用于为查询提供服务,并且在特殊情况下它可以组合不同列上的不同索引。这对于连接文本是不可能的
  2. t1.FullName + .... 可能导致 NULL - 你必须处理这个
  3. t1.FullName + .... 可能导致在 t1.Comment 和 t2.Name 之间找到文本,例如
    • t1.Comment 欢迎来到中心
    • t2.Name = 布伦海姆
    • sometext = '哈勃'
    • .. t1.Comment + t2.Name ... = ... hubBlenheim 匹配 hubble

关于sql - 应用于多个列的相同 LIKE 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13175861/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com