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.