MYSQL-获取组中未通过条件测试的项目列表

问题描述 投票:0回答:3

我正在尝试提出一个查询,该查询将只选择没有工作站处于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

必须将其应用于数千个工作站和服务器。

非常感谢您的帮助!

mysql
3个回答
4
投票

您可以GROUP BY server并在HAVING子句中设置条件:

SELECT server
FROM tablename
GROUP BY server
HAVING SUM(state = 2) = 0

1
投票

您可以使用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   |

View on DB Fiddle


0
投票
SELECT DISTINCT Server
FROM <Relation>
WHERE Server NOT IN (
    SELECT Server
    FROM <Relation>
    WHERE state = 2)

只需在<Relation>中插入您的关系名称。

© www.soinside.com 2019 - 2024. All rights reserved.