2013-06-07 2 views
2

내 DB에서 하나의 데이터 만 삭제하려고하지만 명령을 작성할 때 구문 오류가 계속 발생하여 오류가 어디 있는지 말해 줄 수 있습니까?DELETE FROM ... 또는 "."근처에서 구문 오류가보고됩니다.

이 내가 해봤 명령입니다 :

DELETE FROM database_userprofile WHERE user.username = 'some'; 
ERROR: syntax error at or near "." 
LINE 1: DELETE FROM database_userprofile WHERE user.username = 'some'... 

DELETE FROM database_userprofile USING database_user WHERE user.username="some"; 
ERROR: syntax error at or near "." 
LINE 1: ... database_userprofile USING database_user WHERE user.username=... 

당신이 때문에 문서 나에게

+0

* 항상 * PostgreSQL 버전과 관련된 테이블 정의를 포함합니다. 우리가 무엇을 성취하려고하는지 설명함으로써 우리는 추측 할 필요가 없습니다. 어쨌든 이번에는 위와 같은 방법으로 전권을 썼습니다. * 정확한 명령 텍스트와 오류를 포함했기 때문입니다 (감사합니다!). –

답변

2

귀하의 질문에 아무런 의미가 없습니다.

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

여기에서 user은 어디서 왔습니까? 쿼리에서 참조되지 않습니다. 이 열은 database_userprofile입니까? 그렇다면 user.username을 쓸 수 없습니다 (복합 유형이 아닌 경우 파서에 알리기 위해 (user).username을 작성해야합니다. 그러나 복합 유형이 아닌 것으로 의심됩니다).

즉각적인 원인은 user is a reserved word입니다. 당신은 그것을 인용하지 않고 그 이름을 사용할 수 없습니다

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

"user"를 큰 따옴표로 묶어 놓았 음을 알 수 있습니다. 이는 키워드이기 때문에 테이블 이름이나 다른 사용자 정의 식별자에 사용해서는 안됩니다. 큰 따옴표를 붙이면 키워드가 아닌 식별자로 해석됩니다.

0

을 도울 수 있기를 바랍니다, PostgreSQL의 9.1에서 삭제하기위한 구문은 다음과 같습니다 그래서

[ WITH [ RECURSIVE ] with_query [, ...] ] 
DELETE FROM [ ONLY ] table [ * ] [ [ AS ] alias ] 
    [ USING using_list ] 
    [ WHERE condition | WHERE CURRENT OF cursor_name ] 
    [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ] 

"database_name"이 아닌 DELETE 명령 뒤에 "table_name"을 지정해야합니다.
데이터베이스에 로그인 한 경우에만 데이터를 삭제할 수 있습니다.

사용자가 있습니다.
오류 : "또는."근처에 구문 오류가 있습니다.
WHERE 섹션에서 사용 목록의 대상 테이블이나 테이블을 지정할 수 있기 때문입니다.

+0

사실, 즉각적인 원인은 'user'가 예약어입니다. –

-1

Eclipse에서 pgadmin으로 쿼리를 복사하여 붙여 넣을 때도이 오류가 발생할 수 있습니다. 아무 래도 이상한 기호가 삽입 될 수 있습니다. 이 오류를 방지하려면 메모장처럼 간단한 텍스트 편집기에 붙여넣고 pgadmin에 붙여 넣습니다.

관련 문제