Considerando o modelo ER apresentado pela Figura 1, analise ...
Considerando o modelo ER apresentado pela Figura 1, analise expressão SQL abaixo.
select car_id, max(emc_salario)
from empregadocargo, cargo
where empregadocargo.car_id = cargo.car_id
group by car_id
having max(emc_salario) > 1000
order by max(emc_salario) desc;
Qual alternativa está correta ao executar essa expressão SQL?
Comentários
Veja os comentários dos nossos alunos
Gabarito: E - A expressão não executa corretamente porque possui erro de sintaxe.
Comando SQL:
select car_id, max(emc_salario)
from empregadocargo, cargo
where empregadocargo.car_id = cargo.car_id
group by car_id
having max(emc_salario) > 1000
order by max(emc_salario) desc;
Ao executar no banco de dados MySQL, em boas condições, é apresentado o seguinte erro: "Error Code: 1052. Column 'car_id' in field list is ambiguous".
Ou seja, a coluna "car_id" (presente nas tabelas "cargo" e "empregadocargo"), na cláusula SELECT, é ambígua, a execução do comando não sabe se é a coluna da tabela "cargo" ou da tabela "empregadocargo".
Solução: Colocar o nome da tabela e da coluna, na cláusula SELECT.
Comando SQL:
select empregadocargo.car_id, max(emc_salario)
from empregadocargo, cargo
where empregadocargo.car_id = cargo.car_id
group by car_id
having max(emc_salario) > 1000
order by max(emc_salario) desc;
-----------------------------------------------------------------------------------------------------------------
OBS: O mesmo erro é gerado se colocar na cláusula "GROUP BY", sem especificar na cláusula SELECT a tabela e a coluna, a seguinte instrução (podendo ser a tabela "cargo" ou "empregadocargo"):
group by empregadocargo.car_id
Solução: É preciso definir o nome da tabela e a respectiva coluna na cláusula SELECT.
------------------------------------------------------------------------------------------------------------------
Tudo certo?
Força, Foco, Fé e Gratidão.
select corrigido
SELECT empregadocargo.car_id, MAX(cargo.emc_salario) AS max_emc_salario
FROM empregadocargo
INNER JOIN cargo ON empregadocargo.car_id = cargo.car_id
GROUP BY empregadocargo.car_id
HAVING MAX(cargo.emc_salario) > 1000
ORDER BY max_emc_salario DESC;
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo