MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Corrigir o erro 1064 (42000) ao usar o operador MINUS no MariaDB


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.