这个问题问,
“列出客户的姓名和电话号码的客户,其信用额度低于平均信用额度。(Customers表)”
到目前为止,我有
SELECT customerName, phone
FROM Customers
WHERE creditLimit < (SELECT AVG (creditLimit)
FROM Products);
然而,这个代码不返回任何东西,我究竟做错了什么?谢谢。
如果Products
有一个信用额度我会感到惊讶。如果您符合您的列名,你会立即看到您的错误:
SELECT c.customerName, c.phone
FROM Customers c
WHERE c.creditLimit < (SELECT AVG(p.creditLimit)
FROM Products p
);
换句话说,你应该在子查询中使用Customers
。正在发生的事情是,查询这样解释:
SELECT c.customerName, c.phone
FROM Customers c
WHERE c.creditLimit < (SELECT AVG(c.creditLimit)
FROM Products p
);
也就是说,子查询,使用从该行中,creditLimit
被比较,而不是从在子查询中所引用的表(因为不存在这样的列)。值永远不会比自己少,所以这个从来没有计算为真。
更重要的教训:永远限定列名,所以你永远不要再有这样的问题。