sql >> データベース >  >> RDS >> MariaDB

MariaDBでMINUS演算子を使用するときのエラー1064(42000)を修正しました

    MINUSを使用しようとすると、「SQL構文にエラーがあります…」などの恐ろしいエラー1064(42000)が発生する可能性がある理由が少なくともいくつか考えられます。 MariaDBの演算子。

    以下でこれらを調べ、いくつかの解決策を提供します。

    エラーの例

    エラーの原因となるコードの例を次に示します。

    SELECT TeacherName FROM Teachers
    MINUS
    SELECT StudentName FROM Students;

    結果:

    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

    通常、このエラーは、コードにエラーがある場合に生成されます。 「SQL構文にエラーがあります」と明示的に記載されているため。

    ただし、これはここでのいくつかの可能性の1つにすぎません。

    私の場合、構文にエラーはありません。別の理由が必要です。

    以下は、このエラーの考えられる理由と、それぞれを修正する方法の提案です。

    ソリューション1

    まず、MINUS 演算子はMariaDB10.6.1で導入されました。したがって、以前のバージョンのMariaDBを実行している場合は、MINUS オペレーターはあなたのために働きません。

    この場合、MariaDBインストールを最新バージョン(または少なくとも10.6.1より前のバージョン)にアップグレードしてください。

    ソリューション2

    次に、MINUS 演算子はOracleモードでのみ機能します。これはMariaDBのドキュメントでは明示的に言及されていませんが、MINUSを実装するためのタスクで暗示されています MariaDBの演算子。

    すでにMariaDB10.6.1以降を実行している場合は、MINUSを使用する前にOracleモードに切り替える必要があります。 オペレーター。

    したがって、MINUSの使用を開始する前に、次のコードを実行してください 演算子:

    SET sql_mode = "oracle";

    これで、MINUSを使用できるようになります。 コード内の演算子。

    ソリューション3

    上記のすべてを実行してもエラーが発生する場合は、実際にある可能性があります。 構文にエラーがあります。

    たとえば、MariaDB 10.6.1をOracleモードで実行していますが、次のコードでエラーが発生します。

    SELECT TeacherName FROM Teachers;
    MINUS
    SELECT StudentName FROM Students;

    結果:

    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
    の近くで使用する正しい構文については、MariaDBサーバーのバージョンに対応するマニュアルを確認してください。

    この場合、最初のSELECTの後に誤ってセミコロンを含めました よくある間違いです。これを修正するには、最初のセミコロンを削除します:

    SELECT TeacherName FROM Teachers
    MINUS
    SELECT StudentName FROM Students;

    結果:

    +-------------+
    | TeacherName |
    +-------------+
    | Ben         |
    | Cathy       |
    +-------------+

    成功!

    ソリューション4

    上記のすべての解決策を試してもエラーが発生する場合は、EXCEPTを使用する必要があります。 オペレーター。 MINUS 演算子はEXCEPTの同義語です 、したがって、どちらも同じ構文を使用し、同じ結果を返します。

    SELECT TeacherName FROM Teachers
    EXCEPT
    SELECT StudentName FROM Students;

    結果:

    +-------------+
    | TeacherName |
    +-------------+
    | Ben         |
    | Cathy       |
    +-------------+
    ソリューション5

    今までにMINUSとは何の関係も望まない場合 またはEXCEPT 、別のオプションがあります。

    次のようなサブクエリを使用して、同じ結果を返すことができます。

    SELECT 
        DISTINCT TeacherName
    FROM Teachers t 
    WHERE NOT EXISTS (SELECT StudentName FROM Students s
    WHERE t.TeacherName = s.StudentName);

    明らかに、使用する正確なクエリはスキーマとデータによって異なります。


    1. PostgreSQLでのSin()のしくみ

    2. ウィンドウ関数または共通テーブル式:範囲内の前の行をカウントします

    3. MySQL外部キーエラー1005errno150外部キーとしての主キー

    4. レコードからHTMLタグを削除する