具有某些值的SELECT用户

Cha*_*han 3 mysql

数据

name 'chan' value 'a'
name 'chan' value 'b'
name 'max' value 'a'
name 'max' value 'b'
name 'tony' value 'a'
name 'tony' value 'c'
Run Code Online (Sandbox Code Playgroud)

我需要找出用户谁都有价值ab,这是我的解决方案:

SELECT * FROM `table`
GROUP BY `name`
HAVING SUM(IF(`value` = 'a', 1, 0)) >= 1 AND SUM(IF(`value` = 'b', 1, 0)) >= 1
Run Code Online (Sandbox Code Playgroud)

有更好的方法吗?

Gor*_*off 5

你的解决方案没问题,但最好写成:

SELECT name
FROM `table`
GROUP BY `name`
HAVING SUM(`value` = 'a') >= 1 AND SUM(`value` = 'b') >= 1;
Run Code Online (Sandbox Code Playgroud)

一种可能更有效的形式是:

SELECT name
FROM `table`
WHERE value in ('a', 'b')
GROUP BY `name`
HAVING COUNT(DISTINCT value) = 2;
Run Code Online (Sandbox Code Playgroud)

而且,根据您的数据结构,索引和大小,这也可能是有效的:

select ta.name
from table ta join
     table tb
     on ta.name = tb.name and ta.value = 'a' and tb.value = 'b';
Run Code Online (Sandbox Code Playgroud)

我更喜欢使用的方法group by,having因为它们可以推广到更多样化的条件.