如何使用SQL获取类似的记录

时间:2019-05-30 16:54:04

标签: mysql database

我需要编写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

2 个答案:

答案 0 :(得分:0)

在您的实例中,这样的语句:

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

答案 1 :(得分:0)

使用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     |