PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

DELETE FROM ... melaporkan kesalahan sintaks pada atau di dekat .

Permintaan Anda tidak masuk akal.

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

Di mana user berasal dari? Itu tidak dirujuk dalam kueri. Apakah ini kolom database_userprofile ? Jika demikian, Anda tidak dapat menulis user.username (kecuali jika itu adalah tipe komposit, dalam hal ini Anda harus menulis (user).username untuk memberitahu parser bahwa; tapi saya ragu itu tipe komposit).

Penyebab langsungnya adalah user adalah kata khusus . Anda tidak dapat menggunakan nama itu tanpa mengutipnya:

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

... namun, kueri ini tetap tidak masuk akal, hanya akan memberikan kesalahan yang berbeda:

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...

Tebakan liar saya adalah Anda mencoba melakukan penghapusan melalui gabungan. Saya berasumsi bahwa Anda memiliki tabel seperti:

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
);

dan Anda mencoba menghapus dengan kondisi di tabel lain.

Jika demikian, Anda tidak bisa cukup tulis user.username . Anda harus menggunakan:

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

Anda akan melihat bahwa saya telah mengutip dua kali "pengguna". Itu karena itu adalah kata kunci dan tidak boleh benar-benar digunakan untuk nama tabel atau pengidentifikasi yang ditentukan pengguna lainnya. Mengutip dua kali memaksanya untuk ditafsirkan sebagai pengenal bukan kata kunci.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membuat tabel sementara di SQL

  2. mengimplementasikan UPDATE pada SELECT di Postgres

  3. PostgreSQL:kembalikan pesan setelah hitungan =0

  4. Bagaimana cara menghapus setiap tabel dalam skema tertentu di postgres?

  5. Dapatkan Nama Hari Singkat di PostgreSQL