有人可以帮我执行一个查询,删除查询中重复的元素
Select * from table where APPNAME = 'Ap1' or APPNAME= 'Ap2'
使用distinct的结果
id | APPNAME| USERNAME|
1 Ap1 User1
2 Ap2 User1
3 Ap1 User3
4 Ap2 User4
5 Ap1 User5
6 Ap1 User6
7 Ap2 User6
在这个表中,用户1和6都有这两个应用程序。必须从查询中删除这两个用户。
预期结果是
id | APPNAME| USERNAME|
1 Ap1 User3
2 Ap2 User4
3 Ap1 User5
如果我使用distinct,那么它消除了一个重复,我需要同时消除它们。
使用distinct的结果
id | APPNAME| USERNAME|
1 Ap1 User1
2 Ap1 User3
3 Ap2 User4
4 Ap1 User5
5 Ap2 User6
谢谢
2条答案
按热度按时间u3r8eeie1#
这似乎应该是可行的,除非有语法问题(很可能是
AS
关键字)来阻止它在mysql中工作:子查询列出具有列表中多个条目的用户名
Ap1
以及Ap2
,并且not-in从主查询结果中排除这些。请注意,子查询对应用相同的筛选器appname
作为主查询以确保一致性。否则,你可能会忽略那些Ap1
以及Ap3
,但它们应该包括在内,因为它们只有一个Ap1
以及Ap2
.这种子查询方法在除mysql以外的大多数sqldbms中都是必需的,而且也应该适用于mysql。可能也有使用olap窗口功能的技术。然而,mysql对于select列表和GROUPBY子句中允许/要求的内容也有不同的规则-标准sql要求出现在select列表中的非聚合列在GROUPBY子句中列出,大多数sql dbms都遵循这一规则。据我所知,mysql没有,这可能会允许其他(更简单的)公式-但它们不一定在其他dbms中工作(这可能对您来说很重要,也可能不重要)。
表别名(随
AS
关键字)不是100%必需的;查询在没有它们的情况下可以正常工作(删除AS [tu]
子句,并删除t.
以及u.
前缀)。在另一个sql dbms(informix 12.10)上进行测试,这是可行的(verbatim-informix允许使用大多数关键字作为对象名,而不需要将它们视为用双引号括起来的分隔标识符):输出为:
注意我正在治疗
ID
列作为物理列,从而从原始数据集中选择值。如果它不是一个物理列,不要在问题中显示它,或者显示它是如何生成的。nc1teljy2#