2012-04-02 3 views
0

Windows x64 Visual Studio 2010에서 Sqlite 3.7.11을 사용하고 있습니다. 아래 예제는 sqlite3.exe 도구에서 실행할 수 있습니다. 코드에서 같은 오류가 발생합니다.인용 된 값을 모호한 열 이름으로 거부하는 Sqlite

PRAGMA foreign_keys=ON; 

CREATE TABLE hashes(id INTEGER PRIMARY KEY, hash CHARACTER(4) NOT NULL UNIQUE); 
CREATE TABLE sources(id INTEGER PRIMARY KEY, source VARCHAR(64) NOT NULL UNIQUE); 
CREATE TABLE files(hash_id INTEGER, source_id INTEGER, filename VARCHAR(2048), extension VARCHAR(16), 
FOREIGN KEY(hash_id) REFERENCES hashes(id) 
FOREIGN KEY(source_id) REFERENCES sources(id) 
UNIQUE(hash_id, source_id, filename)); 

그리고이 초기 데이터 : :이 같은 행을 추가 해요

INSERT INTO hashes VALUES(?, "abcd"); 
INSERT INTO sources VALUES(?, "mysource"); 

이 테이블을 감안할 때. 파일 테이블은 위의 제한 조건에 따라 해쉬 및 소스 테이블을 참조합니다.

INSERT INTO files (hash_id, source_id, filename, extension) 
SELECT hashes.id, sources.id, "filename.ext", "ext" 
FROM hashes, sources 
WHERE hashes.hash = "abcd" AND sources.source = "mysource"; 

'id'가 파일 이름 또는 확장 필드에 나타날 때까지 모든 것이 올바르게 작동합니다. 이것은 의미가 없습니다 - 인용되어 있습니다. 이러한 삽입은 모두 실패합니다

INSERT INTO files (hash_id, source_id, filename, extension) 
SELECT hashes.id, sources.id, "id", "" 
FROM hashes, sources 
WHERE hashes.hash = "abcd" AND sources.source = "mysource"; 

INSERT INTO files (hash_id, source_id, filename, extension) 
SELECT hashes.id, sources.id, "filename.id", "id" 
FROM hashes, sources 
WHERE hashes.hash = "abcd" AND sources.source = "mysource"; 

오류 : 모호한 열 이름 :

내가 더 어떻게 든 인용 값을 탈출해야합니까 ID를?

+0

마지막 "id"는 어디에 속합니까? 무슨 칼럼이 "이드"라는거야? – Panagiotis

+0

따옴표 붙은 "id"는 첫 번째 실패한 예제의 파일 이름이고 두 번째 실패한 예제의 확장자입니다. 삽입 후 리터럴 문자열 "id"가 열에 있어야합니다. – bolts

+0

(파일 이름이 "filename.id"이고 확장자가 "id"인) where 절에 있어야하지 않습니까? – Panagiotis

답변

1

음 ... 그건 루키 실수였습니다. 문자열 리터럴을 나타 내기 위해 작은 따옴표를 사용하면이 작업이 가능합니다.

INSERT INTO files (hash_id, source_id, filename, extension) 
SELECT hashes.id, sources.id, "id", "" 
FROM hashes, sources 
WHERE hashes.hash = "abcd" AND sources.source = "mysource"; 

INSERT INTO files (hash_id, source_id, filename, extension) 
SELECT hashes.id, sources.id, 'filename.id', 'id' 
FROM hashes, sources 
WHERE hashes.hash = "abcd" AND sources.source = "mysource"; 
관련 문제