SQLite: Preventing Duplicate Rows

后端 未结 3 1561
庸人自扰
庸人自扰 2020-12-14 09:32
CREATE TABLE Permission ( 
    permissionID INTEGER PRIMARY KEY UNIQUE,
    user         INTEGER
    location     INTEGER 
);

I don\'t want to have

相关标签:
3条回答
  • 2020-12-14 09:57

    First option is creating a unique constraint on user and location columns which will avoid duplicates.

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

    Else if you already have duplicate rows in table you need to delete the duplicate rows and create unique constraint

    To remove duplicate rows use this query

    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 
    )
    
    0 讨论(0)
  • 2020-12-14 10:01
    CREATE TABLE Permission ( 
        permissionID INTEGER PRIMARY KEY UNIQUE,
        user         INTEGER,
        location     INTEGER 
    );
    CREATE UNIQUE INDEX user_location ON Permission (user,location);
    
    0 讨论(0)
  • 2020-12-14 10:09

    Declare a unique constraint on (user, location).

    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
    
    0 讨论(0)
提交回复
热议问题