我有table1
:
我需要知道enum
谁只知道HTML和ACCESS。怎么可以这样做?
我试过了:
SELECT enum
FROM table1
WHERE package="ACCESS" AND package="HTML"
但它没有回答我,我确信应该有...
提前致谢
答案 0 :(得分:3)
您需要比较不同行中的值,使其成为" set-within-sets"子查询。以下是使用group by
和having
的解决方案:
select `enum`
from table1
group by `enum`
having sum(package = 'ACCESS') > 0 and
sum(package = 'HTML') > 0;
having
子句中的每个条件都计算每个值的匹配数。由于您需要两者,因此> 0
可确保enum
至少有一个。
请注意,我已将enum
置于反引号中。 Enum
是MySQL中的关键字。即便如此,也不需要反引号,因为它是解析器允许的少数几个单词之一,没有反引号。不过,在这种背景下看到这个词看起来很奇怪,因此反击。
答案 1 :(得分:0)
您已按enum阅读了表格和分组,然后查看是否有所有所需的软件包以及 none 其他内容。
select enum
from table1
group by enum
having sum(package in ('ACCESS', 'HTML')) = 2
and sum(package not in ('ACCESS', 'HTML')) = 0
and count(*) = 2;
HAVING子句中的三个条件之一是多余的。删除你最不喜欢的: - )
该查询使用MySQL功能,其中true表达式的值为1,false表达式的值为0,因此您可以使用SUM来计算真实表达式。