【问题标题】:SQL: expading "in (...)" to "like"SQL:将“in (...)”扩展为“like”
【发布时间】:2019-11-20 05:34:15
【问题描述】:

我有一个如下的 sql 选择:

select * from table1 where text in (select text from table2)

in clausule 中的实际选择比 this 更复杂。 text 是字符串(varchar)。如何扩展该sql以从table1中选择行,其中text 类似于来自table2的文本(不仅完全等于)?

【问题讨论】:

    标签: sql


    【解决方案1】:

    如果您在 Table2 的文本列中有通配符表达式,您可以这样做。

    select *
    from Table1 as T1
    where exists (select *
                  from Table2 as T2
                  where T1.[text] like T2.[text])
    

    否则您需要在查询中添加%

    select *
    from Table1 as T1
    where exists (select *
                  from Table2 as T2
                  where T1.[text] like '%'+T2.[text]+'%')
    

    【讨论】:

      【解决方案2】:

      类似这样的:

      select * 
      from table1 
      where exists 
        (
          select *
          from table2 
          where table1.text like N'%'+table2.text+N'%' 
        )
      

      注意

      这可能是性能杀手

      【讨论】:

        【解决方案3】:

        我知道我在这里聚会迟到了,但是如果您需要通配符文本作为查询的一部分(就像我所做的那样),您也可以使用 JOIN 来执行此操作。假设您在 table2.text 中有所有要检查的条目,

        SELECT *
        FROM table1 t1
        INNER JOIN table2 t2
        ON t1.text LIKE '%' + t2.text + '%'
        

        【讨论】:

          猜你喜欢
          • 2016-06-04
          • 2013-10-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-09
          • 1970-01-01
          • 1970-01-01
          • 2017-05-27
          相关资源
          最近更新 更多