【问题标题】:How to link two tables in Sqlite? [closed]如何在 Sqlite 中链接两个表? [关闭]
【发布时间】:2026-01-25 18:55:01
【问题描述】:

有2张桌子:

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

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

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

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

SQL怎么写?

【问题讨论】:

    标签: android sql sqlite many-to-many create-table


    【解决方案1】:

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

    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
    )
    

    【讨论】: