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

DELETEFROM...またはその近くで構文エラーを報告します。

    あなたの質問は意味がありません。

    DELETE FROM database_userprofile WHERE user.username = 'some';
                                           ^^^^
    

    userはどこにありますか から来る?クエリでは参照されていません。 database_userprofileの列ですか ?その場合、user.usernameを記述できません。 (複合型でない限り、その場合は(user).usernameを記述する必要があります。 パーサーにそのことを伝えるため。しかし、それが複合型だとは思えません。

    直接の原因は、userです。 予約語です 。引用せずにその名前を使用することはできません:

    DELETE FROM database_userprofile WHERE "user".username = 'some';
    

    ...ただし、このクエリはまだ意味がなく、別のエラーが発生するだけです:

    regress=> DELETE FROM database_userprofile WHERE "user".username = 'some';
    ERROR:  missing FROM-clause entry for table "user"
    LINE 1: DELETE FROM database_userprofile WHERE "user".username = 'so...
    

    私の大げさな推測は、あなたが結合に対して削除を行おうとしているということです。次のようなテーブルがあると思います:

    CREATE TABLE "user" (
        id serial primary key,
        username text not null,
        -- blah blah
    );
    
    CREATE TABLE database_userprofile (
         user_id integer references "user"(id),
         -- blah blah
    );
    

    そして、他のテーブル全体の条件で削除しようとしています。

    もしそうなら、あなたはできません user.usernameと書くだけです 。使用する必要があります:

    DELETE FROM database_userprofile
    USING "user"
    WHERE database_userprofile.user_id = "user".id
    AND "user".username = 'fred';
    

    「ユーザー」を二重に引用していることに気付くでしょう。これはキーワードであり、テーブル名やその他のユーザー定義の識別子には実際には使用しないでください。二重引用符で囲むと、キーワードではなく識別子として解釈されます。



    1. SQL Serverシステムデータベース–基本概念

    2. MySQLテーブルの最大行数を設定するにはどうすればよいですか?

    3. SQL ServerStandardEditionの高可用性の将来

    4. Oracle:ユーザーがデータ項目を変更するように指示したときに、元に戻るブロックへの変更を説明するREDO変更ベクトルをOracleが作成する理由