【问题标题】:How to get similar records using SQL如何使用 SQL 获取相似的记录
【发布时间】:2019-10-16 08:36:19
【问题描述】:

我需要编写 sql 查询来从表中获取相似的记录。它有 100 条值不同的记录。但有些记录有相似的名称。相似的名称以大写或简单开头。

ex- 我想获取所有具有相似名称的相似记录。

Student_no | student_Name | Subject   |class
  1        | Abc          | Java      | 1
  2        | Abc          | Java      | 1
  3        | xyz          | AngularJS | 2 
  4        | xyz          | AngularJS | 2
  5        | Abc Def      | SpringBoot| 3

【问题讨论】:

    标签: mysql database


    【解决方案1】:

    使用 EXISTS 和 LIKE 运算符:

    select t.*
    from tablename t
    where exists (
      select 1 from tablename
      where
        Student_no <> t.Student_no
        and (
          student_Name like concat(t.student_Name, '%')
          or
          t.student_Name like concat(student_Name, '%')
        )
    )
    

    请参阅demo
    结果:

    | Student_no | student_Name | Subject    | class |
    | ---------- | ------------ | ---------- | ----- |
    | 1          | Abc          | Java       | 1     |
    | 2          | Abc          | Java       | 1     |
    | 3          | xyz          | AngularJS  | 2     |
    | 4          | xyz          | AngularJS  | 2     |
    | 5          | Abc Def      | SpringBoot | 3     |
    

    【讨论】:

      【解决方案2】:

      在您的实例中,如下语句:

      SELECT * FROM TABLE WHERE UPPER(student_Name) like UPPER('xyz')
      

      会将所有 student_Name 值转换为大写,然后检索所有大写(或仅所有)“XYZ”值。

      如果不是所有名称都像“xyz”(或者,有些是“xyz1”、“1_xyz”或“ABCXYZDEF”),您需要使用like% 代表任意数量的缺失值:

      SELECT * FROM TABLE WHERE UPPER(student_Name) like UPPER('%xyz%')
      

      更多信息请查看附件链接:SQL- Ignore case while searching for a string

      【讨论】:

      • 谢谢@CannonJ95。但我有不同的名字。我无法逐一更改查询。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      相关资源
      最近更新 更多