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

मैं क्योंकि मैं एक ही डेटा, या एक ही डेटा वाली स्थान के साथ एकाधिक पंक्तियों से युक्त उपयोगकर्ता के साथ कई पंक्तियां कर सकते हैं UNIQUE होने के लिए उपयोगकर्ता या स्थान के लिए नहीं करना चाहती। मैं बस कुछ मूल्य रखने वाले उपयोगकर्ता और स्थान दोनों से बचने के लिए चाहता हूं, उस पंक्ति के साथ कई बार दोहराना।SQLite: रोकथाम डुप्लीकेट पंक्तियों

उदाहरण के लिए: यह ठीक

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

है, लेकिन यह नहीं ठीक है:

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

क्योंकि एक पंक्ति पहले से मौजूद है, जिसमें उपयोगकर्ता = 1 और स्थान = 2.

कैसे कर सकते हैं मैं डुप्लीकेट से बचता हूं?

उत्तर

14

एक अनूठा घोषित की जरूरत है (उपयोगकर्ता, स्थान) पर बाधा।

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

पहला विकल्प user और location कॉलम पर बना रहा है जो डुप्लीकेट से बचेंगे।

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

वरना आप पहले से ही तालिका में डुप्लिकेट पंक्तियों यदि आप डुप्लिकेट पंक्तियों को हटा सकते हैं और बनाने के लिए unique constraint

निकालने के लिए डुप्लीकेट पंक्तियों इस क्वेरी का उपयोग

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); 
संबंधित मुद्दे