假设我有一个表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中的行?
因为,我想知道每行执行一次效率非常低。
答案 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
字段。
我认为查询有效,因为我现在无法对其进行测试。