2011-02-17 4 views
0

다른 외래 키를 사용하여 테이블 B에 중복 항목을 입력 할 수 있어야합니다 (테이블 B는 테이블 A의 키를 참조합니다). 이처럼 :SQLite 테이블을 만들어야합니다

Table A: 
Record with key of 11 
Record with key of 22 

Table B: 
Record referring to Table A record 11, with a field marked unique: value 101 
Record referring to Table A record 22, with a field marked unique: value 101 <--- violates the unique key 

이 내가 시도했지만 작동하지 않았다 무엇 :

CREATE TABLE Readings (
    SITE_ID TEXT REFERENCES SiteData 
    , LOOP_NBR TEXT 
    , LOOP_CLOSED BINARY 
    , SEQ INTEGER 
    , STA TEXT UNIQUE 
    , BS TEXT 
    , FS TEXT 
    , HI TEXT 
    , DESC TEXT 
) 

INSERT INTO Readings (SITE_ID, SEQ) VALUES (' + databaseKey + ', 0) 

누구가이 작업을 수행하는 방법을 알아?

답변

0
CREATE TABLE Readings (
    SITE_ID TEXT UNIQUE REFERENCES SiteData 
    , LOOP_NBR TEXT 
    , LOOP_CLOSED BINARY 
    , SEQ INTEGER 
    , STA TEXT UNIQUE 
    , BS TEXT 
    , FS TEXT 
    , HI TEXT 
    , DESC TEXT 
) 

외부 키에 UNIQUE 추가 같은 SITE_ID 및 STA

+0

어 ... 아니, 그렇지 않을거야. 외래 키에 UNIQUE를 추가하면 해당 열 내에 중복 값을 가질 수 없습니다. UNIQUE 제약 조건은 해당 열에 만 적용됩니다. – CanSpice

+0

미안하지만, 그 중 하나를하지 않았어 ... 테이블 B의 레코드를 테이블 A의 다른 키를 가진 레코드와 구분하여 구분할 수있는 방법이 없어야합니까? – SpokaneDude

+0

나는 더 나쁜 상황이 생기면 항상 제약 조건을 제거하고 SELECT를 사용하여 복제본인지 확인합니다. 맞습니까? – SpokaneDude

1

표 B에 열에 고유 제한 조건이있는 경우 해당 열에 중복 값을 입력하려면 고유 제한 조건을 제거해야합니다.

편집 : 즉, 테이블 생성 코드에서 UNIQUE이라는 단어를 제거하십시오. "고유 한 필드는"STA 열을 가리키는 것으로 가정합니다. 그 열은 유일하게 고유 한 열이기 때문입니다.

편집 번째 : 아래의 의견에 따르면, 당신은 SITE_IDSTA 필드의 독특한 조합에 제약을 넣어합니다. 당신은 할 수 귀하의 SQL 쿼리를 변경할 것 :

CREATE TABLE Readings (
    SITE_ID TEXT REFERENCES SiteData, 
    LOOP_NBR TEXT, 
    LOOP_CLOSED BINARY, 
    SEQ INTEGER, 
    STA TEXT, 
    BS TEXT, 
    FS TEXT, 
    HI TEXT, 
    DESC TEXT, 
    CONSTRAINT UNIQUE (SITE_ID, STA) 
) 
+0

한 고유 제약 조건 위반 만 행을 거부합니다. –

+0

예, STA 열입니다. 그러나 UNIQUE 제약 조건을 제거하면 같은 SITE_ID에서 중복을 허용하지 않으려면 어떻게해야합니까? – SpokaneDude

+0

당신은 "CONSTRAINT UNIQUE (SITE_ID, STA)"와 같은 것으로 [테이블 제약] (http://www.sqlite.org/syntaxdiagrams.html#table-constraint)을 추가하십시오 – CanSpice

관련 문제