然后设置选择

时间:2017-06-23 18:59:01

标签: mysql sql set selection

有人可以帮我解决这个简单(但我不知道如何)的任务吗?

为了避免浪费时间修复每一行,我试图做这样的事情

    SET @auditor = a, b, c;

    SELECT *
    FROM Audits
    WHERE auditor in (@auditor)

我的查询确实很长,这部分" WHERE审核员在(@auditor)"将是重复的。因此,当工作人员发生一些变化时,首先做某种Set会更快更新(我们雇用" d"和/或" b"左)

提前致谢

3 个答案:

答案 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,','))