首页 > 解决方案 > 如何在 Sqlite 中链接两个表?

问题描述

有2张桌子:

CREATE TABLE note (
    note_id   TEXT PRIMARY KEY,
    note_text TEXT
);

CREATE TABLE tag (
    tag_id   TEXT PRIMARY KEY,
    tag_text TEXT
);

我想链接笔记和标签,就像一个笔记应用程序。

您可以为笔记设置标签。此外,您可以使用标签搜索笔记。

怎么写SQL?

标签: androidsqlsqlitemany-to-manycreate-table

解决方案


您正在描述多对多关系。这建议使用第三个表,它引用两个基表,并且每个关联都存储在不同的行中:

create table tag_notes (
    tag_id int references tags(tag_id),
    note_id int refereences notes(note_id),
    primary key (tag_id, note_id)
)

请注意,我int对外键列使用了数据类型——这确实是您应该对基表的主键使用的数据类型。

进行此设置后,您可以使用以下查询通过文本搜索与给定标签相关的所有注释:

select n.*
from notes n
inner join tag_notes tn on tn.note_id = n.note_id
inner join tags t on t.tag_id = tn.tag_id
where t.tag_text = 'mytag'

或者有一个exists条件:

select n.*
from notes n
where exists (
    select 1
    from tag_notes tn 
    inner join tags t on t.tag_id = tn.tag_id
    where t.tag_text = 'my tag' and tn.note_id = n.note_id
)

推荐阅读