对不起,如果我很难用书面形式展示,但我可以肯定地展示。
所以可以说我有这张桌子:
(`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_name
='cws-1'中name
列中具有'linkupdown'的所有记录因此结果将是:
name value_name
----- ----------
cws-1 performancedegrade
cws-1 performancedegrade
cws-2 ICMP-Ping
cws-2 linkupdown
cws-3 performancedegrade
看起来确实很简单,但是我似乎无法提出满足此结果的查询。
任何帮助表示赞赏。
最佳答案
您可以使用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'
和value_name='linkupdown'
的记录。SQL Fiddle Demo
关于mysql - 连续过滤特定值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30201543/