代码之家  ›  专栏  ›  技术社区  ›  pavanred

有没有可能和LIKE一起使用WHERE?

  •  3
  • pavanred  · 技术社区  · 14 年前

    如果我必须搜索一些数据,我可以使用通配符和简单的查询-

    SELECT * FROM TABLE WHERE COL1 LIKE '%test_string%'
    

    而且,如果我必须审视我可以使用的许多价值观-

    SELECT * FROM TABLE WHERE COL1 IN (Select col from AnotherTable)
    

    但是,两者是否可以同时使用呢。也就是说,查询不仅执行WHERE-IN,还执行类似WHERE-LIKE的操作?一种查询,它不查看一组值,而是使用通配符搜索一组值。

    如果这还不清楚,我可以举个例子。告诉我。谢谢。

    示例-

    让我们考虑一下-

    其他的-

      id  | Col
    ------|------
      1   |  one
      2   |  two
      3   |  three
    

    桌子-

    Col   | Col1
    ------|------
     aa   |  one
     bb   |  two
     cc   |  three
     dd   |  four
     ee   |  one_two
     bb   |  three_two
    

    现在,如果我能用

    从COL1所在的表中选择*(从其他表中选择col)
    

    这给了我-

    Col   | Col1
    ------|------
     aa   |  one
     bb   |  two
     cc   |  three
    

    但如果我需要-

    Col   | Col1
    ------|------
     aa   |  one
     bb   |  two
     cc   |  three
     ee   |  one_two
     bb   |  three_two
    

    我想这能帮助你理解我的意思

    8 回复  |  直到 7 年前
        1
  •  4
  •   John Sansom    14 年前
    SELECT * 
    FROM TABLE A
       INNER JOIN AnotherTable B on
         A.COL1 = B.col
    WHERE COL1 LIKE '%test_string%'
    

    根据提供的示例代码,尝试一下。最后的select语句将按照您的请求显示数据。

    create table #AnotherTable
    (
        ID int IDENTITY(1,1) not null primary key,
        Col varchar(100)
    );
    
    INSERT INTO #AnotherTable(col) values('one')
    INSERT INTO #AnotherTable(col) values('two')
    INSERT INTO #AnotherTable(col) values('three')
    
    create table #Table
    (
        Col varchar(100),
        Col1 varchar(100)
    );
    
    INSERT INTO #Table(Col,Col1) values('aa','one')
    INSERT INTO #Table(Col,Col1) values('bb','two')
    INSERT INTO #Table(Col,Col1) values('cc','three')
    INSERT INTO #Table(Col,Col1) values('dd','four')
    INSERT INTO #Table(Col,Col1) values('ee','one_two')
    INSERT INTO #Table(Col,Col1) values('ff','three_two')
    
    SELECT * FROM #AnotherTable
    SELECT * FROM #Table
    
    SELECT * FROM #Table WHERE COL1 IN(Select col from #AnotherTable)
    
    
    SELECT distinct A.*
    FROM #Table A
        INNER JOIN  #AnotherTable B on
            A.col1 LIKE '%'+B.Col+'%'
    
    DROP TABLE #Table
    DROP TABLE #AnotherTable
    
        2
  •  1
  •   Jeff Knecht    14 年前

    对。使用关键字和:

    SELECT * FROM TABLE WHERE COL1 IN (Select col from AnotherTable) AND COL1 LIKE '%test_string%'
    

    但在这种情况下,最好使用JOIN语法:

    SELECT TABLE.* FROM TABLE JOIN AnotherTable on TABLE.COL1 = AnotherTable.col WHERE TABLE.COL1 LIKE '%test_string'
    
        3
  •  1
  •   Leslie    14 年前

    不,因为LIKE子句中的每个元素都需要通配符,而不能使用in子句

        4
  •  1
  •   outis    14 年前

    模式匹配运算符是:

    1. IN ,根据一系列值,
    2. LIKE ,与模式相反,
    3. REGEXP / RLIKE 与正则表达式(包括通配符和替换项,因此最接近于“通过一组值使用通配符”,例如。 (ab)+a|(ba)+b 将匹配所有字符串aba…ba或bab…ab),
    4. FIND_IN_SET 要获取集合中字符串的索引(用逗号分隔的字符串表示),
    5. SOUNDS LIKE 根据字符串的发音和
    6. MATCH ... AGAINST 用于全文匹配。

    这就是字符串匹配,尽管还有其他的 string functions .

    例如,您可以尝试加入 Table.Col1 LIKE CONCAT(AnotherTable.Col, '%') ,尽管性能可能会很糟糕(假设它有效)。

        5
  •  1
  •   Community CDub    8 年前

    尝试交叉联接,以便可以将另一个表中的每一行与表中的每一行进行比较:

    SELECT DISTINCT t.Col, t.Col1
    FROM AnotherTable at
    CROSS JOIN Table t 
    WHERE t.col1 LIKE ('%' + at.col + '%')
    

    为了安全起见,您需要在at.col中转义通配符 this answer 为了这个。

        6
  •  1
  •   Will Marcouiller    14 年前

    如果你是这样想的话:

    SELECT 
        t.* 
    FROM 
        [Table] t 
    LEFT JOIN 
        [AnotherTable] at ON t.Col1 = at.Col 
    WHERE (at.Col IS NOT NULL
        OR t.Col1 LIKE '%some_string%')
    
        7
  •  0
  •   Cătălin Pitiș    14 年前

    像这样的?

    SELECT * FROM TABLE 
    WHERE 
       COL1 IN (Select col from AnotherTable) 
       AND COL1 LIKE '%test_string%'
    
        8
  •  0
  •   Tomas    14 年前

    你是不是在想什么存在?

    从存在的表t中选择*(从另一个表t2中选择col,其中t2.col=t.col,如%test_string%)