此查询是否使用任何子查询或临时表?

时间:2010-11-12 02:51:27

标签: sql

  

可能重复:
  How can I rewrite this query without sub-queries?

我不允许使用子查询或任何类型的临时表作为答案的一部分,此查询是否使用其中任何一个?

SELECT DISTINCT  item_no, avg_price
FROM Prices 
NATURAL JOIN (SELECT  AVG(totalamount) avg_price FROM Prices GROUP BY price) av
WHERE  sum  > aurnover ORDER BY avg_price DESC , branch;

3 个答案:

答案 0 :(得分:0)

您在这些行上使用了两个子查询:

NATURAL JOIN (SELECT branch, AVG(totalamount) avg_price FROM Prices GROUP BY branch) av
NATURAL JOIN (SELECT item_no,branch, SUM(totalamount) sum FROM Prices GROUP BY branch, table_no) su 

答案 1 :(得分:0)

好吧,你肯定有子查询(你可以清楚地看到嵌套的SELECT调用)。

您可能需要检查EXPLAIN的输出(只是将EXPLAIN附加到数据库的查询的开头),以确定它是否会生成临时表。在“额外”列中查找“使用临时”文本。

答案 2 :(得分:0)

您拥有的是派生表。

派生表类似于从视图中选择

考虑一下:

SELECT
  * 
FROM (SELECT * FROM TABLEA) A

如果您创建了一个表,那么您从外部选择的表是从内部选择中派生的 请注意,作为派生表,select只会运行一次

这是一个子查询的示例,它将为每个tableA Record

运行一次
Select
  (Select ID from TABLEB WHERE tableB.Code = TableA.Code) AS TableBID
FROM TableA

这也是一个子查询

   Select 
     *
   FROM TableA
   Where TableA.Code IN (Select TABLEB.Code From TableB)

Subquerys通常用于Where子句和列中,但可能会导致严重的性能问题。