Mysql 如果是子集的一部分,则排除所有结果的最佳方法?

Mysql 如果是子集的一部分,则排除所有结果的最佳方法?,mysql,Mysql,我正试图找出如何找到查询某些部门中没有特定应用程序的工作站集的最佳方法。工作站甚至不能有一个有问题的应用程序来创建列表。如果它有一个有问题的应用程序,我需要完全忽略它 对于数据集,问题应用程序将为111、555和888,因此仅应选择马赫数2。马赫数1和3应省略。查询必须在多个应用程序中使用或能够查询多个应用程序才能省略 最快的查询方式是什么 Mach_name App_id mach 1 111 mach 1 222 mach 1 333 mach

我正试图找出如何找到查询某些部门中没有特定应用程序的工作站集的最佳方法。工作站甚至不能有一个有问题的应用程序来创建列表。如果它有一个有问题的应用程序,我需要完全忽略它

对于数据集,问题应用程序将为111、555和888,因此仅应选择马赫数2。马赫数1和3应省略。查询必须在多个应用程序中使用或能够查询多个应用程序才能省略

最快的查询方式是什么

Mach_name    App_id
mach 1        111
mach 1        222
mach 1        333
mach 2        333
mach 2        222
mach 3        111
mach 3        333


select distinct mach_name from tablename
where app_id not IN('111', '555', '888')
感谢您的帮助。

可能最快(但数据量和索引量很重要) 如果app_ID被索引,A.Mach_name被索引,我看不出这有多大改进。因为一旦找到一个匹配项,它就会短路

Select A.mach_name 
from tableName A
where not exists (Select 1 from tableName B where A.Mach_name = B.Mach_name
and B.App_ID in ('111','555','888')
Group By A.Mach_name)
下一个最快的可能每次都要生成一个完整的匹配;但还是比笔记快

Select A.mach_name 
from tableName A
LEFT JOIn tableName B 
 on A.Mach_name = b.Mach_name
and B.App_ID in ('111','555','888')
where B.Mach_name is null
Group by A.Mach_name

我认为
不存在
,或者在不存在的地方使用左连接将是最快的。