Mysql 如何从一个或多个结果集中删除基于列的重复项

Mysql 如何从一个或多个结果集中删除基于列的重复项,mysql,sql,peewee,Mysql,Sql,Peewee,我以以下方式从同一个表中获得两个结果集: | id | name | age | ------------------------------------- | 1 | John | 12 | | 2 | Jim | 23 | | 3 | Joel | 54 | | 4 | Jane | 12 |

我以以下方式从同一个表中获得两个结果集:

|    id    |    name    |    age    |
-------------------------------------
|    1     |    John    |    12     |
|    2     |    Jim     |    23     |
|    3     |    Joel    |    54     |
|    4     |    Jane    |    12     |
如果我基于一个时间间隔创建resultset,并且一行在一个或多个resultset之间重复出现,那么如何根据
name
列有效地过滤这些结果集?结果集的数量为
1..x

我应该:循环遍历集合,同时组合集合和过滤器,还是可以直接使用SQL进行查询并删除重复项

由于我使用
peewee
我的查询如下:

result_1 = Users.select().where(Users.age > 10)
result_2 = Users.select().where(Users.age > 20)
更新:

实际表中没有重复项,只对结果集进行了访问,我希望创建一个没有重复项的结果集,或者合并所有结果集而没有重复项。

您可以尝试以下操作:(CLM是重复列)


如果我理解正确,这就是开箱即用的功能:

SELECT ID, Name, Age
FROM Users
WHERE Age > 10

UNION

SELECT ID, Name, Age
FROM Users
WHERE Age > 20;
您可以进行多次选择。要求是selects必须返回相同数量的列,且类型兼容

编辑
如果需要额外筛选,请将联合包装在派生表中:

SELECT *
FROM
(
  SELECT ID, Name, Age
  FROM Users
  WHERE Age > 10

  UNION

  SELECT ID, Name, Age
  FROM Users
  WHERE Age > 20
) X
WHERE x.Name LIKE 'Jo%';

请再次检查我的问题,特别是
更新
区域。如何创建结果集?显示查询。@HamletHakobyan,我使用peewee,但它生成的是我们所知道的非常简单的查询。我很可能需要在rawquery而不是peewee中执行此特定任务。这与我自己所做的非常接近,但是如果我只想使用
Name
列而不是
ID
Age
?换句话说,在该年龄间隔内只能有一个
Jane
,即使表中还有更多。更新-AFAIK派生表的性能不如视图,但是,与视图不同,在应用外部筛选器之前,联合选择的性能不如视图。Oracle和SqlServer都有CTE解决了视图和派生表之间的这种脱节问题。我不确定这是否能完全解决这个问题。基于内部联合的结果,如何筛选出所有重复的
名称
,以便只出现一次,例如
Jane
,这适用于所有其他
名称
。正如我现在看到的,附加筛选器上的WHERE子句只是硬编码的。换句话说,我希望联合基于
名称
,而不是
年龄
id
。换句话说,我希望
联合
基于
名称
,这应该可以解决问题,但是我的结果集将只包含
name
SELECT *
FROM
(
  SELECT ID, Name, Age
  FROM Users
  WHERE Age > 10

  UNION

  SELECT ID, Name, Age
  FROM Users
  WHERE Age > 20
) X
WHERE x.Name LIKE 'Jo%';