【问题标题】:find if one column contains another column查找一列是否包含另一列
【发布时间】:2013-12-19 01:14:37
【问题描述】:

任何人都知道如何创建查询以查明一列中的数据是否包含另一列的(类似函数)?

例如

ID||名字||姓 ---------------------- 1 ||马特 ||能源部 ---------------------- 2 ||史密斯 ||约翰·多伊 ---------------------- 3 ||约翰||约翰·史密斯

查找 Last_name 包含 First_name 的所有行。答案是 ID 3

提前致谢

【问题讨论】:

  • 在 Oracle 中,我会尝试 Select * from TABLE where instr(first_name, last_name) >= 1; 之类的东西。 MySql 有一个 instr() 函数,其行为方式相同。
  • 这很好,如果可以的话,我会投票给这个答案,谢谢
  • 我将其发布为答案。不确定我是否正确,所以感谢您的确认!

标签: mysql sql oracle


【解决方案1】:

这是一种方法:

Select *
  from TABLE
 where instr(first_name, last_name) >= 1;

【讨论】:

    【解决方案2】:

    试试这个:

    select * from TABLE where last_name LIKE '%' + first_name + '%'
    

    【讨论】:

      【解决方案3】:
      WHERE Last_Name LIKE '%'+First_Name+'%'
      

      您也可以使用INSTR(),但请注意,这两种方法都执行全表扫描,这是处理高性能 MySQL 时的一般禁忌。

      【讨论】:

      • 在性能方面,他们可以通过在(Last_Name, First_Name)上放置索引来避免全表扫描。
      • @JeffreyKemp,我一直认为有前缀和后缀通配符,或者只是前缀,会忽略索引,因为它不能使用索引中的第一组字符,导致全扫描。使用列作为 LIKE 查询时,这有什么不同吗?
      • 是的,通常 LIKE 以 % 开头不会使用索引,因为它无法进行索引扫描以快速缩小到记录的子集。但是,Oracle 可以执行通常比全表扫描更快的全索引扫描。
      • @JeffreyKemp,这很有趣,谢谢分享。公平地说,我对 Oracle 不太熟悉,事实上,直到现在我才知道标记为 Oracle 的 OP - 将来必须更仔细地查看:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-13
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多