有人可以帮我解决这个简单(但我不知道如何)的任务吗?
为了避免浪费时间修复每一行,我试图做这样的事情
SET @auditor = a, b, c;
SELECT *
FROM Audits
WHERE auditor in (@auditor)
我的查询确实很长,这部分" WHERE审核员在(@auditor)"将是重复的。因此,当工作人员发生一些变化时,首先做某种Set会更快更新(我们雇用" d"和/或" b"左)
提前致谢
答案 0 :(得分:1)
我建议您在查询顶部使用临时表:
CREATE TEMPORARY TABLE FilteredAudits AS (SELECT * FROM Audits WHERE Auditor IN (a,b,c))
然后根据需要将Audits
替换为FilteredAudits
。
这种方法的好处在于,您保证过滤器仅应用一次,这意味着查询的其余部分将JOIN
尽可能地设置为最小的数据集,并且您不必重复IN()
1}}在整个查询过滤。
答案 1 :(得分:0)
您可以使用数组变量和FIND_IN_SET
SET @auditors = 'a,b,c';
SELECT *
FROM Audits
WHERE FIND_IN_SET(auditor,@auditors)
说明:
FIND_IN_SET(auditor,@auditors)
如果@auditors
中找到了审核员,则返回索引。
但我会考虑将审核员保存在一个单独的表中而不是变量中,以便更好地跟踪它们。
答案 2 :(得分:0)
您无法像数组一样设置参数。你将不得不做类似
的事情设置@ auditor ='a,b,c'
现在如果审核员是一个数字,这应该可以工作,但如果它是其他的,那么你将不得不在你的系统上创建一个功能dbo。[tfn_SplitList]你将使用它如下
审核员(从dbo中选择列表。[tfn_SplitList](@ auditor,','))