此查询从数据库MariaDB(MySQL)返回用户. 我需要从Result中删除行,其中在Surname中添加了"(Old)"或"-R". 如何编辑查询?

SELECT au.id,
       au.name,
       au.surname
FROM statements s 
JOIN aduser au ON au.id=s.id_usp
WHERE s.id_utv = 10
GROUP BY au.surname
ORDER BY au.surname ASC

根据该查询结果:

id name surname
124 Mike Argle
221 Mike Argle (old)
138 Lisa Doe
126 Lisa Doe (old)
123 John Harris
135 John Harris - R
324 Ann Perez
329 Tiffani Perez

对这一结果.查询应返回以下结果:

id name surname
124 Mike Argle
138 Lisa Doe
123 John Harris
324 Ann Perez
329 Tiffani Perez

推荐答案

您可以使用ROW_NUMBER窗口函数从name + ' - R'/' (old)'个加倍的值中 Select 第一个值.

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER(
                  PARTITION BY name, surname REGEXP name+' (- R|(old))'  
                  ORDER BY surname) AS rn
    FROM tab
)
SELECT id, name, surname
FROM cte
WHERE rn = 1

查看演示here.


您的查询将按如下方式更新:

WITH cte AS (
    SELECT au.id,
           au.name,
           au.surname,
           ROW_NUMBER() OVER(
               PARTITION BY au.name, au.surname REGEXP au.name+' (- R|(old))'  
               ORDER BY au.surname) AS rn
    FROM statements s 
    JOIN aduser au ON au.id=s.id_usp
    WHERE s.id_utv = 10
)
SELECT id, name, surname
FROM cte
WHERE rn = 1
ORDER BY surname ASC

Mysql相关问答推荐

用于搜索从各种表中获得的结果的查询

MySQL逻辑全部

含有子查询的MySQL函数出现语法错误

亚马逊RDS MySQL-无法';t执行';使用读取锁定刷新表';

Mysql:使用like Select 查询

为什么Mysql会根据查询参数改变查询执行计划?

任何值的 SQL WHERE 子句?

如何在 mysql 的 group by 子句中 Select 最后创建的记录?

检索按键列值分组的最新日期 (MySql)

访问 nodejs、mysql 和 json 中的嵌套对象数组

Select 多列但仅按 1 列分组

显示值为空的所有列名

在 PHP 中获取 MySQL 列的总和

为什么数据库行元组中的整数具有L后缀?

在mysql中复制没有数据的数据库 struct (带有空表)

在osx的命令行中使用Mysql-找不到命令?

如何通过一个语句描述数据库中的所有表?

MySQL 错误 2014 的原因在其他无缓冲查询处于活动状态时无法执行查询

获取最后一组不同的记录

MySQL CREATE TABLE 语句中的 PRIMARY KEY 定义