问的问题
“列出信用额度小于平均信用额度的客户的客户名称和电话号码。(客户表)”
到目前为止,我有
SELECT customerName, phone
FROM Customers
WHERE creditLimit < (SELECT AVG (creditLimit)
FROM Products);
但是此代码未返回任何内容,我在做什么错呢?谢谢。
答案 0 :(得分:2)
如果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
,而不是子查询中引用的表中使用(因为没有这样的列)。值永远不会小于其自身,因此它永远不会求值为true。
要学习的更重要的一课:始终限定您的列名,因此您再也不会遇到这样的问题。