【问题标题】:how to use LIKE with column name如何将 LIKE 与列名一起使用
【发布时间】:2009-09-09 10:08:59
【问题描述】:

通常LIKE语句用于检查数据的模式。

示例:

select * from table1 where name like 'ar%'

我的问题是使用LIKE 语句的一列表格。

示例:

select * from table1, table2 where table1.x is like table2.y%

查询上面的结果错误。 like查询中如何使用一列数据?

【问题讨论】:

  • 来自 Arun 的评论,这是针对 MySQL...
  • 阿伦你接受一些答案怎么样?
  • 让他休息一下,从他问到现在才40分钟! :)
  • 生日诺拉! 11个问题,不接受?厚脸皮草皮!

标签: sql mysql


【解决方案1】:

你已经接近了。

LIKE 运算符适用于字符串(CHAR、NVARCHAR 等)。所以你需要将'%'符号连接到字符串...


MS SQL 服务器:

SELECT * FROM table1,table2 WHERE table1.x LIKE table2.y + '%'


然而,使用 LIKE 通常比其他操作慢。它有用、强大、灵活,但有性能考虑。不过我会把这些留给另一个话题:)


编辑:

我不使用 MySQL,但这可能有用...

SELECT * FROM table1,table2 WHERE table1.x LIKE CONCAT(table2.y, '%')

【讨论】:

  • 我有如下错误 ERROR 1064 (42000): You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“+ %”附近使用正确的语法
  • MySQL 不使用 + 作为连接运算符。显然它是一个名为 concat() 的函数,具有针对不同数据类型的不同函数......
  • 感谢你以“你很亲密”开始你的回答,不像这里大多数傲慢的人喜欢劝阻别人。交易
  • @MatBailie 在 PostgreSQL 中以任何方式都可以做到这一点 - 上述语法显然不起作用。
【解决方案2】:

SQL 服务器

 WHERE ColumnName LIKE '%'+ColumnName+'%'

【讨论】:

  • 感谢您也在 SQL SERVER 中回答这个问题。尽管有 @caitriona 的 cmets,但人们实际上正在使用其他数据库,并且可能通过 Google 找到了这篇文章
【解决方案3】:

ORACLE 数据库示例:

select * 
from table1 t1, table2 t2
WHERE t1.a like ('%' || t2.b || '%')

【讨论】:

    【解决方案4】:
    ...
    WHERE table1.x LIKE table2.y + '%'
    

    【讨论】:

    • 也许你需要括号? WHERE table1.x LIKE (table2.y + '%') -- 或者可能是 "||"而不是按照 SQL 标准的“+”。
    【解决方案5】:
    declare @LkeVal as Varchar(100)
    declare @LkeSelect Varchar(100)
    
    Set @LkeSelect = (select top 1 <column> from <table> where <column> = 'value')
    Set @LkeVal = '%' + @LkeSelect
    
    select * from <table2> where <column2> like(''+@LkeVal+'');
    

    【讨论】:

    • 这应该通过从第一个表缩小搜索来优化查询。
    【解决方案6】:

    对于 SQLLite,您需要连接字符串

    select * from list1 l, list2 ll 
    WHERE l.name like "%"||ll.alias||"%";
    

    【讨论】:

      【解决方案7】:

      对于您使用的 MySql,如下所示,这对我有用

      SELECT * FROM table1, table2 WHERE table1.x LIKE (table2.y);
      

      它取table2的列值y。

      【讨论】:

        【解决方案8】:

        这对我有用:

        SELECT * FROM `mdl_user` WHERE `firstname` LIKE concat(lastname,'%') AND lastname != ''
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-11-07
          • 2014-06-24
          • 2017-09-10
          • 1970-01-01
          • 1970-01-01
          • 2011-05-01
          相关资源
          最近更新 更多