【问题标题】:Is it possible to capture data from a WHERE clause?是否可以从 WHERE 子句中捕获数据?
【发布时间】:2010-06-13 07:05:27
【问题描述】:

我有一个场景,我在我的 SQL 的 WHERE 子句中计算一些东西,但我也想得到那个计算 - 因为它很昂贵。是否有可能在WHERE 子句中完成某些操作的结果,如下所示:

SELECT `foo` FROM `table` WHERE (foo = LongCalculation(`column`))

一厢情愿,还是有可能使用 MySQL?

编辑:计算取决于列

【问题讨论】:

  • 如果您有 1000 行并且 LongCalculation 将使用 1000 个不同的输入运行,那么就没有解决方案。但是,如果不同值的数量远小于 1000,那么您可以在 LongCalculation 中使用中间缓存存储,这当然必须是一个存储过程。不知道是否可以在存储过程调用之间保留变量值。
  • 您可以使用临时表来存储特定输入的计算输出。
  • 查看我的回答,了解我是如何解决这个问题的。我并不是要避免计算每一行,而是每行不止一次。

标签: sql mysql select


【解决方案1】:
set @bar = LongCalculation();
select foo from table where foo=@bar;

【讨论】:

  • +1:假设LongCalculation 不依赖于行(不从table 中获取任何列。
【解决方案2】:

对@cherouvim 的想法进行了一些修改,我让它与行相关的函数一起工作:

set @bar = 0;

SELECT
  `product_name`,
  @bar AS `stock`
FROM `jos_vm_product`
WHERE (@bar := `product_in_stock`) > 0 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多