Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
相同的查询MySQL用户定义变量_Mysql_Sql - Fatal编程技术网

相同的查询MySQL用户定义变量

相同的查询MySQL用户定义变量,mysql,sql,Mysql,Sql,我正在尝试使用,但由于限制,我无法以与演示相同的方式使用它们,其中一个查询设置变量,另一个查询使用它。我的要求是能够在查询中多次使用它 考虑以下几点: SELECT (Some Really Taxing Calculation) AS Total FROM Purchases WHERE Total < 55 AND itemName = "Bananas" OR Total > 90 AND itemName = "Apples" OR Total = 30 AND itemNa

我正在尝试使用,但由于限制,我无法以与演示相同的方式使用它们,其中一个查询设置变量,另一个查询使用它。我的要求是能够在查询中多次使用它

考虑以下几点:

SELECT (Some Really Taxing Calculation) AS Total FROM Purchases
WHERE Total < 55 AND itemName = "Bananas"
OR Total > 90 AND itemName = "Apples"
OR Total = 30 AND itemName = "Peaches"
ORDER BY Total
最好只运行一次总计计算,然后在整个查询过程中多次使用结果。现在,我让它在一个查询中工作的唯一方法是对它用作总计的每个位置重新运行它,返回一个错误,表示使用了未知列

SELECT *, total.Value
FROM Purchases, (SELECT COUNT(*) as Value .... Some Really Taxing Calculation) total
WHERE Total < 55 AND itemName = "Bananas"
OR Total > 90 AND itemName = "Apples"
OR Total = 30 AND itemName = "Peaches"
ORDER BY Total

因此,基本上,在FROM子句中的嵌套SELECT类型查询中进行计算,并为其命名为total,这样您就可以在查询中的其他位置使用它了。

将total计算嵌入子查询中

SELECT
  Total
FROM
  (SELECT (Some Really Taxing Calculation) AS Total, * FROM Purchases) AS Purchases
WHERE Total < 55 AND itemName = "Bananas"
   OR Total > 90 AND itemName = "Apples"
   OR Total = 30 AND itemName = "Peaches"
ORDER BY
  Total

注意:子查询内联视图在生成其计划时由MySQL扩展。在查询周围加括号并不一定意味着你强迫它效率低下:

你能描述一下限制吗?如果你把它放在FROM子句中,它不是只计算一次吗,你可以通过total.value之类的方法得到值。@Ryan Gross,单次查询,我不能运行多个相互关联的查询。@德克:我不熟悉你所说的方法,如果你认为它可行并且可以解释的话,我会尝试一下。这个累人的计算,是返回int/float值还是以某种方式返回列名?在第一种情况下,我看不出您是如何使用该值并将其与另一个值进行比较的。好吧,如果它使用基于行的计算,我必须在总数中重新创建该环境,因此基本上应用我的其他where's和join两次?如果您必须要获得“一些非常累人的计算”值,那么是的,您必须重新应用a连接的相同位置。首先用所需的依赖项编写计算查询/语句,然后用paren将其包装,并将其粘贴到另一个SQL查询的FROM子句中。