如何在 PostgreSQL 中获取 ID?

How to get ID in PostgreSQL?

我正在学习 SQL 使用 Postgres。在这里,我想获取员工没有任何单元格 phone 的员工 ID,键入 'C',答案应该是 3, 4, 5,因为这些员工没有单元格 [=21] =].我尝试了以下查询,但它没有给我正确的答案,而是给了我 1, 2, 3, 4, 5

SELECT employeeID
FROM PhoneInfo
WHERE Type != 'C';

我做错了什么?

因为有些行 Type <> 'C' 来自 employeeID 1 或 5。

正如我们从您的情况中看到的那样,我们将从 employeeid 为 1 的行中获取一些行。

sqlfiddle

如果你想获得 employeeID 其中不包含任何 Type = 'C' 我们可以尝试使用 NOT EXISTS 子查询

SELECT employeeID
FROM PhoneInfo t1
WHERE NOT EXISTS (
    SELECT 
    FROM PhoneInfo tt
    WHERE t1.employeeID = tt.employeeID
    AND Type = 'C'
) 

如果你想获得没有重复行的 employeeID,我们可以尝试使用 DISTINCT,它可能看起来像你预期的那样。

SELECT DISTINCT employeeID
FROM PhoneInfo
WHERE employeeID NOT IN (
                         SELECT employeeID
                         FROM PhoneInfo
                         WHERE Type = 'C'
                        ); 

这个问题会给你正确的答案。在这里,我们试图找到类型为 C 的 employeeID 列表中不存在的 employeeID。希望对您有所帮助!

最简单的方法可能是使用集合操作:

SELECT employeeid FROM phoneinfo
EXCEPT
SELECT employeeid FROM phoneinfo WHERE type = 'C';