2015-10-06 106 views
0

前段时间,使用SQLite,我写了一大堆SQL作为视图的基础。现在我再看一遍,我看不出它可能如何工作,但它已经很好地工作了很长时间。 sql的要点如下。 我得到的平均(结果)在正确两个Xÿ即使X使用条款等这个SQL为什么有效? (我不认为它应该!)

select avg(result) from TableB 

...当tableB的不包含一个名为result的字段。

为什么这段代码不会失败?

CREATE TABLE TableB 
(TheKey TEXT); 

CREATE TABLE TableA 
( TheID TEXT, 
    TheKey TEXT, 
    result INTEGER ); 

SELECT 
    TheID, 
    avg(result) as y, 
    (select avg(result) from TableB as T where T.TheKey = TableA.TheKey) as x, 
FROM 
    TableA 
LEFT JOIN 
    TableB 
ON TableA.TheKey = TableB.TheKey 
GROUP BY 
    TheID, TableA.TheKey 

回答

1

既然你有一个FROM TableA LEFT JOIN TableB这两个表都在选择列表中的范围。

avg(TableB.result)会失败。在本文中与avg(TableA.result)相同。

+0

哦,当然,真的是愚蠢的问题。我现在需要做一个修改,包括使用TableB的权重来调整平均值,这就是为什么我发现它。我想我在编写原始SQL时可能已经考虑到了这一点,所以我将TableB的引用留在那里。 – user3209752

相关问题