2016-07-26 10 views
0

私は場所と距離のテーブルを持っています。 AとBの間の距離はBとAの間の距離と同じです。 'AとB'の組み合わせが 'BとA'の組み合わせを挿入しようとしたときに列が失敗するように、すでにCHECK制約は、副問合せを含めることはできませんので、あなたはtriggerでこれをしなければならないsqlite一意のインデックス複数の列任意の組み合わせ

INSERT INTO locTbl VALUES ('A', B', 100.0); //Good to insert 

loc1 | loc2 | dist 
-----+------+----- 
A  B  100.0 

INSERT INTO locTable VALUES('B','A',100.0); //Produce an error 

答えて

1

を挿入されています:

CREATE TRIGGER locTbl_loc12_unique 
BEFORE INSERT ON locTbl 
FOR EACH ROW 
BEGIN 
    SELECT RAISE(FAIL, "loc2/loc1 already exists") 
    FROM locTbl 
    WHERE loc1 = NEW.loc2 
     AND loc2 = NEW.loc1; 
END; 
1

だけLOC1 < = LOC2(または> =)

が必要です
create table locTbl (
    loc1 text, 
    loc2 text, 
    dist integer, 
    constraint c check(loc1<=loc2) 
);