Então eu fiz uma consulta SQL simples:
SELECT companyname
FROM works w1, (
SELECT companyname,sum(salary) AS sumsal
FROM works
GROUP BY companyname
) w2
WHERE
w1.companyname=w2.companyname
funciona bem até agora, mas então eu adiciono a seguinte linha na cláusula where:
AND w2.sumsal=(SELECT MIN(w2.sumsal)
FROM w2);
Eu recebo:
ERROR 1146 (42S02): Table 'companydb.w2' doesn't exist
Estou usando o MySQL 8.0.
Antes de responder a pergunta, você está usando
WHERE
em vez deJOIN
juntar as tabelas, e juntar as tabelas usando o nome da empresa em vez do ID da linha/chave primária. É melhor usarJOIN
com o ID de linha ao ingressar em tabelas (se você estiver usando o nome da empresa como chave primária, você realmente precisa adicionar um ID de linha e usá-lo como a chave).Em relação à sua pergunta, o problema é que a subconsulta
w2
não pode ser usada na parte certa doSELECT
porque está fora do escopo, mas você pode usar uma Common Table Expression para criar uma "visualização temporária" que pode ser usada em qualquer parte do A pergunta. Então você pode usar dois métodos para obter o resultado:Usando
MIN()
:Usando
EXISTS
:Eu criei este db<>fiddle para testá-lo online, usei
JOIN
com o ID da empresa em vez do nome como exemplo de como você pode usar isso.