所以我做了一个简单的 SQL 查询:
SELECT companyname
FROM works w1, (
SELECT companyname,sum(salary) AS sumsal
FROM works
GROUP BY companyname
) w2
WHERE
w1.companyname=w2.companyname
到目前为止它工作正常,但后来我在 where 子句中添加了以下行:
AND w2.sumsal=(SELECT MIN(w2.sumsal)
FROM w2);
我得到:
ERROR 1146 (42S02): Table 'companydb.w2' doesn't exist
我正在使用 MySQL 8.0。
在回答问题之前,您使用
WHERE
而不是JOIN
用于连接表,并使用公司名称而不是行 ID/主键连接表。连接表时最好使用JOIN
行 ID(如果您使用公司名称作为主键,您确实必须添加以添加行 ID 并将其用作键)。关于你的问题,问题是子查询
w2
不能在正确的部分使用,SELECT
因为它超出了范围,但是你可以使用Common Table Expression创建一个可以在任何部分使用的“临时视图”查询。然后你可以使用两种方法来获取结果:使用
MIN()
:使用
EXISTS
:我创建了这个 db<>fiddle用于在线测试,我在那里使用
JOIN
了公司 ID 而不是名称作为如何使用它的示例。