SQL - AND语句

时间:2014-11-20 16:09:06

标签: mysql sql

我有table1

enter image description here

我需要知道enum谁只知道HTML和ACCESS。怎么可以这样做?

我试过了:

SELECT enum
FROM table1 
WHERE package="ACCESS" AND package="HTML" 

但它没有回答我,我确信应该有...

提前致谢

2 个答案:

答案 0 :(得分:3)

您需要比较不同行中的值,使其成为" set-within-sets"子查询。以下是使用group byhaving的解决方案:

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来计算真实表达式。