DBMS如何解决以下查询?

时间:2015-04-25 04:16:30

标签: mysql sql database rdbms

假设我有一个表Table1,其中包含属性id,Name,Address,Salary。现在,我编写以下查询:

SELECT * FROM Table1 WHERE 2*Salary > (SELECT MAX(Salary) FROM Table1)

很明显,查询

SELECT MAX(Salary) FROM Table1

将为Table1中的每一行产生相同的结果。那么DBMS是为每一行执行一次此聚合查询还是执行一次并存储要与每行进行比较的值?如果是这样,DBMS如何确定此查询的结果独立于Table1中的行?

因为,我想知道每行执行一次效率非常低。

2 个答案:

答案 0 :(得分:1)

尝试此操作首先将最大值存储在变量中,然后使用该变量

Declare @Salary money
    SELECT @Salary=MAX(Salary) FROM #yourTable
    SELECT * FROM #yourTable WHERE 2*Salary > @Salary

答案 1 :(得分:0)

您可以像这样使用CROSS JOIN,

SELECT t1.*
FROM 
    Table1 t1
    CROSS JOIN
    (SELECT MAX(Salary) As maxSalary
     FROM Table1) t2
WHERE t1.Salary * 2 > t2.maxSalary
  

注意:
  然后,第一个现金表中的大多数RDBM系统都在寻找它们。所以我实际上在maxSalary添加了Table1字段。

我认为查询有效,因为我现在无法对其进行测试。