我正在提交一个(可能很长)“匹配实体”列表,每个列表都包含要匹配的用户数据,以及该匹配信息的唯一 ID。来自匹配用户的实际用户数据,以及该匹配的唯一 ID,需要从我的 SQL 查询中返回。所以,假设我有 2 个实体来尝试匹配用户,这两个实体都试图将电话号码与用户的电话号码匹配;client_handle
我可以使用这样的联合(是提交的唯一 ID)来匹配与提交的实体关联的任何用户以及“匹配实体”的唯一ID:
SELECT
[client_handle] = 'axtwe-wasst',
[user_id],
[email],
[mobile_no],
[firstname],
[surname]
FROM
[dbo].[vAPP_UsersActive]
WHERE
[mobile_no] in ('+44 7747 122123', '+44 7904 223323')
UNION
SELECT
[client_handle] = 'zjfft-albwq',
[user_id],
[email],
[mobile_no],
[firstname],
[surname]
FROM
[dbo].[vAPP_UsersActive]
WHERE
[mobile_no] in ('+44 7758 444111', '+44 7758 444222', '+44 7758 444333')
UNION
这种方法的问题在于,如果向我提交了大量的匹配实体,它可能会导致非常多的s。1000 个提交的匹配实体将导致 999UNION
秒。这实际上是性能方面的问题,是否有更好的方法来实现我想要的结果?或者,我可以遍历每个提交的匹配实体并运行一个查询来匹配每个,但是如果提交了 1000 个匹配实体,我将有 1000 个单独的查询,这似乎更糟。
示意图:
PS。
[parameters group]
不使用 - 在显示的源数据上它是多余的,但在实际任务中可能有用(如果是这样,则必须使用 GROUP BY 而不是 DISTINCT)。我最终做的是传入代表不同查询集的 JSON,并使用
OPENJSON
. 这实际上使查询足够简单,甚至不需要在存储过程中或创建临时。表,OPENJSON
可以直接在JOIN
查询中使用,是一个表值函数:...其中
@jsonQuery
变量以如下值传入:调用代码首先必须将具有相同查询的查询扁平
UniqueId
化为多个“查询行”,如上面的 JSON 所示,然后使用键为UniqueId
.