Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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
Sql 在何处嵌套查询_Sql - Fatal编程技术网

Sql 在何处嵌套查询

Sql 在何处嵌套查询,sql,Sql,我有一个6元组的产品表 select productprice from product 给出6个元组 100 70 15 90 150 250 我有一个问题: SELECT productprice FROM product WHERE productprice < (SELECT AVG(productprice)FROM product); 如果我这样做 SELECT productprice FROM product WHE

我有一个6元组的产品表

select productprice
from product 
给出6个元组

100 70 15 90 150 250 我有一个问题:

SELECT productprice     
FROM    product 
WHERE productprice < (SELECT    
AVG(productprice)FROM product);
如果我这样做

SELECT  productprice        
FROM    product 
WHERE (SELECT avg(productprice)
FROM product) > 100
然后我得到:

100 70 15 90 150 250
为什么会这样?为什么在最后一个查询中忽略了该条件?不管条件如何,它仍然返回所有元组。

条件不会被忽略,只是与主查询无关。 子查询SELECT AVGcFROM表1返回一个标量值,外部查询不会以任何方式影响该标量值

在前两个示例中,您将该标量值与外部查询中表的一列进行了比较,这就是它影响结果的原因


在上一个查询中,您将其与一个常量值进行了比较——因此,如果c列的平均值大于您使用的常量值2,则外部查询将返回表中的所有行。如果将>更改为,则最终查询中的选择与行的内容无关

在前面的查询中,您将该行的c值与平均值进行比较,这将在逐行的基础上有所不同

在上一个查询中,您正在选择所有行c值的平均值大于100的位置。您将获得所有行或无行,这取决于平均值是否大于100。在这种情况下,平均值是112.5,因此where子句实际上是where 112.5>100,这对于所有行都是正确的


要获取行数据的子集,需要选择行上不同的某些条件。例如,其中c>100将只返回两行150和250

谢谢!我也期待着同样的事情,但结果有点奇怪。我用一个真实的例子编辑了我的文章。是的,所有行的平均值是112.5,所以你的最后一个查询是显示112.5>100的任何行,这对所有行都适用,所以你得到了所有行。WHERE子句中没有根据各行中的数据进行选择的内容,因此您将获得全部或全部。将>反转为<,则不会得到任何行。要获得数据的子集,您的选择标准需要基于每行中的数据,而不是像average这样的数据集范围的聚合。谢谢。我用真实的数据编辑了我的文章。我还不清楚。看来情况没有什么影响。哦。。我得到了它。。条件112.5>100为真。这不是平均价格的比较。谢谢比较平均价格,只是计算整个表的平均价格,然后与硬编码值进行比较。如果将其与外部查询中的列进行比较,则可能会影响返回的行数。因为它是和一个常数比较的,所以它实际上是一个全有或全无的条件。