过滤行中的特定值

时间:2015-05-12 21:14:10

标签: mysql sql

很抱歉,如果我很难以书面形式展示,但我绝对可以展示它。

所以我想说我有这张表:

(`name` varchar(5), `value_name` varchar(18))
;

INSERT INTO Alarms
(`name`, `value_name`)

VALUES
('cws-1', 'linkupdown'),
('cws-1', 'linkupdown'),
('cws-1', 'performancedegrade'),
('cws-1', 'performancedegrade'),
('cws-2', 'ICMP-Ping'),
('cws-2', 'linkupdown'),
('cws-3', 'performancedegrade')
;

表格如下:

name      value_name
-----     ----------
cws-1     linkupdown
cws-1     linkupdown
cws-1     performancedegrade
cws-1     performancedegrade
cws-2     ICMP-Ping
cws-2     linkupdown
cws-3     performancedegrade

我想要一个查询,排除value_namename ='cws-1'

中包含'linkupdown'的记录

结果将是:

name      value_name
-----     ----------
cws-1     performancedegrade
cws-1     performancedegrade
cws-2     ICMP-Ping
cws-2     linkupdown
cws-3     performancedegrade

看起来很简单,但似乎无法提出满足此结果的查询。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用NOT EXISTS

SELECT name, value_name
FROM Alarms AS a
WHERE name = 'cws-1' 
      AND NOT EXISTS (SELECT 1
                      FROM Alarms
                      WHERE a.name = name AND value_name =  'linkupdown')

上述查询会返回与cws-1的记录没有任何关系的所有value_name='linkupdown'个已命名记录。

仔细观察OP中所述的所需输出,这可能是您真正想要的:

SELECT name, value_name
FROM Alarms AS a
WHERE NOT (name = 'cws-1' AND value_name = 'linkupdown')

此查询将从Alarms 中选择所有记录,不包括包含name = 'cws-1' {{1 }}。

SQL Fiddle Demo