我正在制作带有标签的图像列表,所以我决定制作一个具有ImagesPath和标签的SQLite数据库。我知道我必须将这两个表组合在一起,但很多情况下我会做很多,但我真的不知道如何做。
我有三个表:
1)ImagesPath(INT ID,TEXT imagePath)
2)标签(INT ID,TEXT标题)
3)ImageTag(INT id,image_id,tag_id)
在此字段中,我必须引用ImagesPath.id和Tags.id,但我不知道如何。有人可以帮我吗?
答案 0 :(得分:1)
例如,您可以使用JOIN的:-
SELECT imagePath, title FROM ImagesPath
JOIN ImageTag ON image_id = ImagesPath.id
JOIN Tags ON tag_id = Tags.id
请考虑以下内容,这些内容将删除并创建3个表,然后填充这些表,最后运行查询:-
DROP TABLE IF EXISTS ImagesPath;
DROP TABLE IF EXISTS Tags;
DROP TABLE IF EXISTS ImageTag;
CREATE TABLE IF NOT EXISTS ImagesPath (id INTEGER, ImagePath TEXT);
CREATE TABLE IF NOT EXISTS Tags (id INTEGER, title TEXT);
CREATE TABLE IF NOT EXISTS ImageTag (id INTEGER, Image_id INTEGER, Tag_id INTEGER);
INSERT INTO ImagesPath (id,Imagepath) VALUES (1,'Image1'),(2,'Image2'),(3,'Image3');
INSERT INTO Tags (id,title) VALUES (1,'TagA'),(2,'TagB'),(3,'TagC');
INSERT INTO ImageTag (Image_id,Tag_id) VALUES (1,3),(2,1),(2,2),(2,3),(3,1),(3,3);
SELECT imagePath, title FROM ImagesPath
JOIN ImageTag ON image_id = ImagesPath.id
JOIN Tags ON tag_id = Tags.id;
结果将是:-
请注意,尚未将任何值分配给ImageTag表的id列,该值可能用处不大,因为ImageTag表基本上是将图像映射到标签(允许多对多关系)
请注意,您必须谨慎对待歧义性,例如一共有3个 id 列,因此 id 分别以ImagesPath.id
和Tags.id