如何在 MySQL 查询中多次有效地使用函数调用的结果,而不需要多次调用该函数?

发布于 2024-10-08 20:10:41 字数 307 浏览 3 评论 0原文

我有一个 SQL 查询,例如:

SELECT blah
  FROM table
 WHERE field1 % functCall(otherField1, otherField2) = 0
    OR field2 % functCall(otherField1, otherField2) = 0
    OR field3 % functCall(otherField1, otherField2) = 0

有没有一种方法可以让我只能调用 functCall 一次,并在其他两次比较中重用它的结果?

谢谢!

I have an SQL query like:

SELECT blah
  FROM table
 WHERE field1 % functCall(otherField1, otherField2) = 0
    OR field2 % functCall(otherField1, otherField2) = 0
    OR field3 % functCall(otherField1, otherField2) = 0

Is there a way that I can only call functCall once, reusing it's result in the other two comparisons?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我不吻晚风 2024-10-15 20:10:41

MySQL 会自动优化您的查询,以便该函数仅被调用一次,结果将被重用。

如果您想避免重复的代码,您可以在派生表中评估该函数,然后对其进行查询。

SELECT blah
FROM
(
    SELECT 
        blah, field1, field2, field3,
        functCall(otherField1, otherField2) AS f
    FROM your_table
) T1
WHERE field1 % f = 0
   OR field2 % f = 0
   OR field3 % f = 0

MySQL will automatically optimize your query so that the function is only called once and the result will be reused.

If you want to avoid the repeated code you can evaluate the function in a derived table and then query that.

SELECT blah
FROM
(
    SELECT 
        blah, field1, field2, field3,
        functCall(otherField1, otherField2) AS f
    FROM your_table
) T1
WHERE field1 % f = 0
   OR field2 % f = 0
   OR field3 % f = 0
梦里泪两行 2024-10-15 20:10:41

首先将函数的结果存储在变量中,然后在查询中使用它。

Store the result of the function in a variable first the use it in your query.

魂牵梦绕锁你心扉 2024-10-15 20:10:41

在 from 子句中使用子查询,然后检查外部查询中的条件:

 SELECT blah
 FROM
   (select functCall(f1, f2) as fc, f1, f2, f3 from table) as t 
 WHERE f1 % fc = 0
    OR f2 % fc = 0
    OR f3 % fc = 0

Use a sub-query in the from clause, then check the condition in the outer query:

 SELECT blah
 FROM
   (select functCall(f1, f2) as fc, f1, f2, f3 from table) as t 
 WHERE f1 % fc = 0
    OR f2 % fc = 0
    OR f3 % fc = 0
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文