SQLite - 对同一数据/列的多个条目进行SELECT

1 csv sqlite select store relational-database

我对SQLite有点新意,我的数据库设计有点困难.我会解释一下.假设您和您的朋友在互联网上使用了许多不同的昵称(每人可以超过一个).我们这里有一个人的ID和这个人使用的所有昵称的列表.这是大型列表中的单个条目.这里的目标是使用SQLite存储此数据,SELECT语句可用于获取包含指定昵称的所有条目.

我考虑过创建一个包含两列的表,首先是ID(主键),另一列是以CSV格式保存昵称的TEXT .但是在这个例子中,我不知道如何编写select语句来搜索和匹配存储在CSV中的昵称.

想法?

MPe*_*ier 5

对于初学者来说,这就是你拥有的

SELECT Name, Nickname FROM MyTable WHERE Nickname = 'Copper';
Run Code Online (Sandbox Code Playgroud)

但我强烈建议为Names使用一个表,并使用一个用于使用Nicknames的表,这样Nickname就会引用Names.

CREATE TABLE Users (
    UserId INTEGER PRIMARY KEY, 
    Name TEXT
    );
CREATE TABLE Nicknames (
    NickNameId INTEGER PRIMARY KEY, 
    UserId INTEGER REFERENCES Users(UserId), 
    NickName Text
    );
Run Code Online (Sandbox Code Playgroud)

你会发现这个方案可以让你更好地控制编辑条目,删除它们等.

用以下任一方式查询INNER JOIN:

SELECT Users.Name, NickNames.NickName 
    FROM Users INNER JOIN NickNames ON User.UserId=NickNames.UserId
    WHERE NickNames.NickName = 'Copper';
Run Code Online (Sandbox Code Playgroud)

或嵌套查询:

SELECT Users.Name
    FROM Users
    WHERE User.UserId IN (
    SELECT NickNames.UserId 
        FROM NickNames 
        WHERE NickNames.NickName = 'Copper');
Run Code Online (Sandbox Code Playgroud)

这两个是等效的(在这种情况下)是指定带有WHERE子句的连接.它有效,但它的形式很差(不太清楚INNER JOIN):

SELECT Users.Name, NickNames.NickName 
    FROM Users, NickNames 
    WHERE User.UserId = NickNames.UserId
    AND NickNames.NickName = 'Copper';
Run Code Online (Sandbox Code Playgroud)