【发布时间】:2018-11-16 22:25:24
【问题描述】:
我有 2 个表,父级和一个具有 1-N 关系的子级。
-
Person:ID (INT),名称 (VARCHAR) -
PersonToCompany:ID (INT)、PersonId (INT)、电子邮件 (Varchar)
我想加入两个表,但从 PersonToCompany 表中只选择 1 条记录。我知道我可以使用例如CROSS APPLY,但我也有一些条件。
我只想选择特定的PersonToCompany 记录,如下所示:
WHERE (Email LIKE '%@abc.com%' OR Email LIKE '%xyz.com%')
现在棘手的部分 - 有些人可以拥有 2 个 PersonToCompany 记录,同时具有 @abc.com 和 @xyz.com 电子邮件域。在这种情况下,我想确保选择带有 @abc.com 的记录。我怎样才能做到这一点?
这是我的原始子查询,它选择 @abc.com 或 @xyz.com 没有偏好:
CROSS APPLY (
SELECT TOP 1
PersonToCompany.Email AS Email
FROM PersonToCompany
WHERE PersonToCompany.PersonId = Person.Id
AND (PersonToCompany.Email LIKE '%@abc.com%') OR (PersonToCompany.Email LIKE '%@xyz.com%')
) PersonToCompany
【问题讨论】:
标签: sql sql-server cross-apply