pkid clientname location
1 Jones NY
2 Jones NJ
3 Jones TX
4 Jones FL
5 Jones IA
6 Jones NC
7 Jones SC
8 Jones VA
9 Smith FL
10 Smith CO
11 Smith NJ
12 Smith ME 我想找到什么客户(琼斯或史密斯)的位置,纽约,NJ和NC,并有琼斯的输出。
如果我使用in子句,则查询将从表中选择clientname ('NY‘、'NJ’、'NC')中的位置,但in子句充当"OR“和I需要a " and”。
发布于 2019-04-16 18:21:05
INDEX(location, clientname) -- This is part of the optimization
SELECT clientname
FROM tbl
WHERE location IN ('NY', 'NJ', 'NC')
GROUP BY clientname
HAVING COUNT(*) = 3(如果可以有多行,则更改为COUNT(DISTINCT location)。)
请注意,索引是
WHERE )是最优的吗?我不知道。它的性能将取决于mysql/mariadb的版本--在这方面已经有了改进。在一个类似查询的实验中,它只读取3‘位置的行(索引),而不是整个索引。我使用了讨论过的这里技术来发现读取的行数。
https://dba.stackexchange.com/questions/232960
复制相似问题