过滤表以省略特定行

Posted

技术标签:

【中文标题】过滤表以省略特定行【英文标题】:Filter table to leave out specific rows 【发布时间】:2022-01-01 15:08:50 【问题描述】:

我有桌子

| WorkerID | ProjectName |  Role  |
|----------|-------------|--------|
|     1    |    Test     | Leader |
|----------|-------------|--------|
|     4    |    Test     | Worker |
|----------|-------------|--------|
|     2    |    Stuff    | Leader |
|----------|-------------|--------|
|     3    |    Proj     | Worker |

现在我想像这样列出没有指定 Leader 的每个 ProjectName:

| ProjectName |
|-------------|
|    Proj     |

现在我只知道如何过滤所有领导者的项目名称,但不知道如何以其他方式过滤它们!

任何帮助表示赞赏:)

【问题讨论】:

你用的是什么数据库? mysql! @Zakaria 【参考方案1】:

一种方法是使用聚合和HAVING 子句中的条件:

SELECT ProjectName
FROM tablename
GROUP BY ProjectName
HAVING SUM(Role = 'Leader') = 0;

【讨论】:

这行得通,非常感谢:) 很简单!【参考方案2】:

(仅供参考:我对 PostgreSQL 很熟悉,所以我不确定这是否可以完全转移)

我会做一个 子查询 来识别具有领导者的项目,并在您的主查询中,做一个 WHERE 语句,选择所有 NOT IN 子查询的项目。

SELECT ProjectName
FROM Table
WHERE ProjectName NOT IN (
  SELECT ProjectName
  FROM Table
  WHERE Role = 'Leader'
  )

【讨论】:

以上是关于过滤表以省略特定行的主要内容,如果未能解决你的问题,请参考以下文章

Oracle:有效地使用where子句过滤时间戳列以获取特定日期的所有记录

如何过滤我的表以在 Oracle 中显示结果?

多次加入同一个表以每次使用过滤器检索不同的数据

过滤掉特定值而不排除 NULL 行

如何在 QTableView 中应用过滤器后显示特定行

按字段名称在新的 JS 过滤数组中移动 JS 数组行