然后设置 Select
Set then Select
有人可以帮我完成这个简单的(但我不知道怎么做)任务吗?
为了避免浪费时间修复每一行,我正在尝试做这样的事情
SET @auditor = a, b, c;
SELECT *
FROM Audits
WHERE auditor in (@auditor)
我的查询确实很长,这部分"WHERE auditor in (@auditor)"会重复。因此,先做某种Set会在劳动力发生一些变化时更新更快(我们聘请"d" and/or "b" left)
提前致谢
我建议在您的查询顶部使用临时 table:
CREATE TEMPORARY TABLE FilteredAudits AS (SELECT * FROM Audits WHERE Auditor IN (a,b,c))
然后根据需要将 Audits
替换为 FilteredAudits
。
这种方法的好处是您保证过滤器只会应用一次,这意味着查询的其余部分将 JOIN
到尽可能小的数据集,并且您不必重复IN()
在整个查询中过滤。
您可以使用数组变量和 FIND_IN_SET
SET @auditors = 'a,b,c';
SELECT *
FROM Audits
WHERE FIND_IN_SET(auditor,@auditors)
说明:
FIND_IN_SET(auditor,@auditors)
如果在 @auditors
中找到审计员,则为真,在这种情况下,它 returns 索引。
但我会考虑将审核员保存在单独的 table 而不是变量中,以便更好地跟踪他们。
您不能像数组一样设置参数。你将不得不做类似
的事情
设置@auditor='a,b,c'
现在,如果 auditor 是一个数字,这应该可以工作,但如果它是任何其他数字,那么您将必须创建一个函数 dbo。[tfn_SplitList] 在您的系统上,您将像下面那样使用它
auditor in(select 来自 dbo 的列表。[tfn_SplitList](@auditor ,','))
有人可以帮我完成这个简单的(但我不知道怎么做)任务吗?
为了避免浪费时间修复每一行,我正在尝试做这样的事情
SET @auditor = a, b, c;
SELECT *
FROM Audits
WHERE auditor in (@auditor)
我的查询确实很长,这部分"WHERE auditor in (@auditor)"会重复。因此,先做某种Set会在劳动力发生一些变化时更新更快(我们聘请"d" and/or "b" left)
提前致谢
我建议在您的查询顶部使用临时 table:
CREATE TEMPORARY TABLE FilteredAudits AS (SELECT * FROM Audits WHERE Auditor IN (a,b,c))
然后根据需要将 Audits
替换为 FilteredAudits
。
这种方法的好处是您保证过滤器只会应用一次,这意味着查询的其余部分将 JOIN
到尽可能小的数据集,并且您不必重复IN()
在整个查询中过滤。
您可以使用数组变量和 FIND_IN_SET
SET @auditors = 'a,b,c';
SELECT *
FROM Audits
WHERE FIND_IN_SET(auditor,@auditors)
说明:
FIND_IN_SET(auditor,@auditors)
如果在 @auditors
中找到审计员,则为真,在这种情况下,它 returns 索引。
但我会考虑将审核员保存在单独的 table 而不是变量中,以便更好地跟踪他们。
您不能像数组一样设置参数。你将不得不做类似
的事情设置@auditor='a,b,c'
现在,如果 auditor 是一个数字,这应该可以工作,但如果它是任何其他数字,那么您将必须创建一个函数 dbo。[tfn_SplitList] 在您的系统上,您将像下面那样使用它
auditor in(select 来自 dbo 的列表。[tfn_SplitList](@auditor ,','))