我正在尝试提出一个查询,该查询将只选择没有工作站处于2状态的服务器名。
换句话说,如果VM服务器具有关联的状态为2的vwks,那么我不希望该服务器作为输出的一部分。我只想列出vwks状态为1的服务器,因为我试图确定哪些vm服务器是“空闲”或打开的。如果vwks的状态为2,则它处于当前某个构建阶段,因此需要忽略整个服务器。
数据
WKS Server state
-----------------------
vwks1 svr1 1
vwks2 svr2 1
vwks3 svr3 2
vwks4 svr1 2
vwks5 svr2 1
所需的输出(只有svr2没有处于2状态的vwks)。
Server
------
svr2
必须将其应用于数千个工作站和服务器。
非常感谢您的帮助!
您可以GROUP BY server
并在HAVING
子句中设置条件:
SELECT server
FROM tablename
GROUP BY server
HAVING SUM(state = 2) = 0
您可以使用WHERE NOT EXISTS
模式(MySQL v5.7)
CREATE TABLE test (
`WKS` VARCHAR(5),
`Server` VARCHAR(4),
`state` INTEGER
);
INSERT INTO test
(`WKS`, `Server`, `state`)
VALUES
('vwks1', 'svr1', 1),
('vwks2', 'svr2', 1),
('vwks3', 'svr3', 2),
('vwks4', 'svr1', 2),
('vwks5', 'svr2', 1);
查询#1
SELECT DISTINCT `Server`
FROM test t1
WHERE NOT EXISTS
(
SELECT 1 FROM test t2 WHERE `state` = 2 AND t1.`Server` = t2.`Server`
);
输出
| Server |
| ------ |
| svr2 |
SELECT DISTINCT Server
FROM <Relation>
WHERE Server NOT IN (
SELECT Server
FROM <Relation>
WHERE state = 2)
只需在<Relation>
中插入您的关系名称。