Existem pelo menos algumas razões possíveis pelas quais você pode estar recebendo o temido erro 1064 (42000) que diz “Você tem um erro na sua sintaxe SQL…” etc ao tentar usar o
MINUS
operador no MariaDB. Vou explorá-los abaixo e oferecer algumas soluções.
Exemplo do erro
Aqui está um exemplo de código que causa o erro:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
Resultado:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT StudentName FROM Students' at line 3
Normalmente, esse erro é produzido quando você tem um erro em seu código. Como afirma explicitamente “Você tem um erro na sua sintaxe SQL”.
No entanto, essa é apenas uma das várias possibilidades aqui.
No meu caso, não há erro na minha sintaxe. Deve haver outro motivo.
Abaixo estão alguns possíveis motivos para esse erro e sugestões de como corrigir cada um.
Solução 1
Em primeiro lugar, o
MINUS
O operador foi introduzido no MariaDB 10.6.1. Portanto, se você estiver executando uma versão anterior do MariaDB, o MINUS
operador não funcionará para você. Nesse caso, atualize sua instalação do MariaDB para a versão mais recente (ou pelo menos uma versão não anterior a 10.6.1).
Solução 2
Em segundo lugar, o
MINUS
operador só funciona no modo Oracle. Embora isso não seja explicitamente mencionado na documentação do MariaDB, está implícito na tarefa de implementação do MINUS
operador no MariaDB. Se você já estiver executando o MariaDB 10.6.1 ou posterior, precisará alternar para o modo Oracle antes de usar o
MINUS
operador. Portanto, execute o seguinte código antes de começar a usar o
MINUS
operador:SET sql_mode = "oracle";
Agora você deve ser capaz de usar o
MINUS
operador em seu código. Solução 3
Se você fez todos os procedimentos acima, mas ainda está recebendo um erro, é possível que realmente exista um erro na sua sintaxe.
Por exemplo, estou executando o MariaDB 10.6.1 no modo Oracle, mas o código a seguir produz o erro:
SELECT TeacherName FROM Teachers;
MINUS
SELECT StudentName FROM Students;
Resultado:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'MINUS
Neste caso, acidentalmente incluí um ponto e vírgula após o primeiro
SELECT
declaração, o que é um erro comum. Para corrigir isso, eu simplesmente removeria o primeiro ponto e vírgula:SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
Resultado:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
Sucesso!
Solução 4
Se você tentou todas as soluções acima, mas ainda está recebendo um erro, talvez seja hora de usar o
EXCEPT
operador. O MINUS
operador é sinônimo de EXCEPT
, então ambos usam a mesma sintaxe e retornam o mesmo resultado. SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;
Resultado:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
Solução 5
Se até agora você não quer nada com
MINUS
ou EXCEPT
, existe outra opção. Você pode usar uma subconsulta como a seguinte para retornar o mesmo resultado:
SELECT
DISTINCT TeacherName
FROM Teachers t
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);
Obviamente, a consulta exata que você usa dependerá do seu esquema e dados.