1 csv sqlite select store relational-database
我对SQLite有点新意,我的数据库设计有点困难.我会解释一下.假设您和您的朋友在互联网上使用了许多不同的昵称(每人可以超过一个).我们这里有一个人的ID和这个人使用的所有昵称的列表.这是大型列表中的单个条目.这里的目标是使用SQLite存储此数据,SELECT语句可用于获取包含指定昵称的所有条目.
我考虑过创建一个包含两列的表,首先是ID(主键),另一列是以CSV格式保存昵称的TEXT .但是在这个例子中,我不知道如何编写select语句来搜索和匹配存储在CSV中的昵称.
想法?
对于初学者来说,这就是你拥有的
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)