很抱歉,如果我很难以书面形式展示,但我绝对可以展示它。
所以我想说我有这张表:
(`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
列name
='cws-1'
结果将是:
name value_name
----- ----------
cws-1 performancedegrade
cws-1 performancedegrade
cws-2 ICMP-Ping
cws-2 linkupdown
cws-3 performancedegrade
看起来很简单,但似乎无法提出满足此结果的查询。
感谢任何帮助。
答案 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 }}。