当我们在 Teradata 中没有匹配记录时如何 select 一个 id

How to select an id when we do not have matching records in Teradata

假设我有两个 table,如下所示:

+-------------------------+   +-------------------------+
| Person                  |   | Person Details          |
+----------+--------------+   +-------------------------+
| Name     |VARCHAR(255)  |   | SK       | Decimal(18,0)|
| PersonID | INT(11)      |   | PersonID | INT(11)      |
+----------+--------------+   | Name     | VARCHAR(255) |
                              |                         |
                              +----------+--------------+

我的 table 包含以下数据:

+------------------------+    +---------------------------+
| Person                 |    | Person Details            |
+----------+-------------+    +-------+----------+--------+
| Name     | PersonID    |    | SK    | PersonID | Name   |
+----------+-------------+    +-------+----------+--------+
| Sean     | 1           |    | 1     | 1        | Sean   |
| Javier   | 1           |    | 2     | 1        | Cooper |
| Fluffy   | 2           |    | 3     | 2        | Trade  |
+----------+-------------+    +-------+----------+--------+

我需要 select 来自 Person table 的 PersonId,其中与 Id 关联的所有名称都不应该在 Person Details table 中。在上面的示例中,我的查询应该 return 只有 2 而不是 PersonID 1,因为在 Person 和 Person_details table 中都可以找到 "Sean"。我尝试了以下查询但没有成功:

sel P.PersonID
from Person P
left join Person_details PD
on PD.PersonId = P.PersonId
and PD.Name = P.Name

where PD.PersonId is NULL

谁能帮忙。

提前致谢。

您当前查询 returns 所有 PersonID,其中 any 名称缺失。

要获取缺少 所有 名称的 ID,您需要聚合:

SELECT P.PersonID
FROM Person P
LEFT JOIN Person_details PD
  ON PD.PersonId = P.PersonId
 AND PD.Name = P.Name
GROUP BY p.PersonID             -- for each PersonID
HAVING Max(pd.PersonID) IS NULL -- no match was found