【问题标题】:How to make reference to another tables? (SQLite)如何引用另一个表? (SQLite)
【发布时间】:2019-01-02 19:38:51
【问题描述】:

我正在制作一个带有标签的图像列表,所以我决定创建一个带有 ImagesPath 和标签的 SQLite 数据库。我知道我必须在许多情况下合并这两个表,但我真的不知道如何。

我有三张桌子:

1)ImagesPath (INT id, TEXT imagePath)

2)标签(INT id,TEXT 标题)

3)ImageTag(INT id, image_id, tag_id)

在此字段中,我必须参考 ImagesPath.id 和 Tags.id 但我不知道如何。有人可以帮帮我吗?

【问题讨论】:

  • 听起来你需要一个 JOIN。
  • 查找“JOIN”这个概念,可能还有“FOREIGN KEY”
  • 但是我只能使用这个 JOIN 进行查询(例如:SELECT),或者我必须在创建第三个表时加入这个表?我真的需要第三张表(ImageTag)吗?

标签: database sqlite android-sqlite android-database


【解决方案1】:

例如,您可以使用 JOIN :-

SELECT imagePath, title FROM ImagesPath 
    JOIN ImageTag ON image_id = ImagesPath.id
    JOIN Tags ON tag_id = Tags.id

join-clause

工作示例

考虑以下内容,它删除并创建 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.idTags.id

【讨论】:

    猜你喜欢
    • 2015-06-04
    • 2016-11-06
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2010-11-03
    相关资源
    最近更新 更多