PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

XÓA TỪ ... báo cáo lỗi cú pháp tại hoặc gần.

Truy vấn của bạn không có ý nghĩa gì.

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

user ở đâu đến từ? Nó không được tham chiếu trong truy vấn. Nó có phải là một cột của database_userprofile không ? Nếu vậy, bạn không thể viết user.username (trừ khi đó là kiểu kết hợp, trong trường hợp đó bạn sẽ phải viết (user).username để nói với trình phân tích cú pháp rằng; nhưng tôi nghi ngờ đó là loại kết hợp).

Nguyên nhân trước mắt là user là một từ dành riêng . Bạn không thể sử dụng tên đó mà không trích dẫn nó:

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

... tuy nhiên, truy vấn này vẫn không có ý nghĩa gì, nó sẽ chỉ đưa ra một lỗi khác:

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

Suy đoán hoang đường của tôi là bạn đang cố gắng xóa qua một lần tham gia. Tôi giả sử rằng bạn có các bảng như:

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

và bạn đang cố xóa với một điều kiện trên bảng khác.

Nếu vậy, bạn không thể chỉ cần viết user.username . Bạn phải sử dụng:

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

Bạn sẽ nhận thấy rằng tôi đã trích dẫn kép "người dùng". Đó là bởi vì nó là một từ khóa và không thực sự nên được sử dụng cho tên bảng hoặc các số nhận dạng do người dùng xác định khác. Trích dẫn kép nó buộc nó phải được thâm nhập như một số nhận dạng không phải là một từ khóa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để nhập tệp .sql vào cơ sở dữ liệu Heroku postgres của tôi?

  2. Mở rộng hàng qua * không được hỗ trợ ở đây

  3. Tại sao trong PostgreSQL enum loại giá trị null mảng được phép?

  4. Thay đổi kiểu dữ liệu của một cột thành nối tiếp

  5. Làm cách nào để nhận lệnh postgres 'nth_value' tương đương trong SQL pyspark Hive?