当我们在 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
假设我有两个 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