2015-03-28 26 views
8
CREATE TABLE Permission ( 
    permissionID INTEGER PRIMARY KEY UNIQUE, 
    user   INTEGER 
    location  INTEGER 
); 

Tôi không muốn có người dùng hoặc vị trí là UNIQUE vì tôi có thể có nhiều hàng với người dùng chứa cùng dữ liệu hoặc nhiều hàng có vị trí chứa cùng dữ liệu. Tôi chỉ muốn tránh có cả người dùng và vị trí có một số giá trị, với hàng đó lặp lại bất kỳ số lần nào.SQLite: Ngăn hàng trùng lặp

Ex: đây là ổn

permissionID user location 
-------------------------- 
     1  1  2 
     2  2  2 
     3  2  1 

nhưng điều này là không ổn:

permissionID user location 
-------------------------- 
     1  1  2 
     2  1  2 

vì liên tiếp đã tồn tại trong đó người dùng = 1 và vị trí = 2.

thế nào có thể Tôi tránh trùng lặp?

Trả lời

14

Khai báo một độc đáo ràng buộc trên (người dùng, vị trí).

CREATE TABLE Permission (
    permissionID integer primary key, 
    user integer not null, 
    location integer not null, 
    unique (user, location) 
); 
 
sqlite> insert into Permission (user, location) values (1, 2); 
sqlite> insert into Permission (user, location) values (1, 2); 
Error: UNIQUE constraint failed: Permission.user, Permission.location 
2

Tùy chọn đầu tiên đang tạo một unique constraint trên userlocation các cột sẽ tránh trùng lặp.

Create unique index permission_user_location on permission (user,location); 

khác nếu bạn đã có hàng trùng lặp trong bảng bạn cần phải xóa các hàng trùng lặp và tạo unique constraint

Để loại bỏ các hàng trùng lặp sử dụng truy vấn này

DELETE 
FROM Permission 
WHERE NOT EXISTS 
(
select 1 from 
(
select min(permissionID) as permissionID, user, location 
From Permission A 
Group by user, location 
) B 
Where B.permissionID = Permission.permissionID 
AND B.user = Permission.User 
AND B.location = Permission.location 
) 
1
CREATE TABLE Permission ( 
    permissionID INTEGER PRIMARY KEY UNIQUE, 
    user   INTEGER, 
    location  INTEGER 
); 
CREATE UNIQUE INDEX user_location ON Permission (user,location); 
Các vấn đề liên quan