SQLite选择子查询以列中列表的形式返回多行

2mbi3lxu  于 2023-01-02  发布在  SQLite
关注(0)|答案(1)|浏览(150)

所以我重新设计了我的数据库,因为我意识到可以通过将以前的"列表"(由空格分隔的单词/字符串的字符串)列拆分到不同的表中来使它变得更好。
我的问题是,我需要从一个表中获取文件名,该表具有引用另一个表中的uid的某个uid,我大多数情况下都是这样做的,除了我需要能够从引用第二个表的原始表中获取多行。
如果这没有意义,下面是我的代码和相关结构:

SELECT * FROM (
    SELECT 
        a.uid, a.reward_title, a.reward_content, 
        a.reward_date as date_time, a.reward_pinned as pinned, (
            SELECT c.file_name FROM files c WHERE c.reference_uid = a.uid AND c.reference_type = ?
        ) as images
    FROM rewards a
    INNER JOIN subscriptions b ON b.creator_uid = a.creator_uid AND b.tier_hierarchy = a.tier_hierarchy
    WHERE b.user_uid = ?
)
CREATE TABLE rewards (
    uid TEXT UNIQUE PRIMARY KEY NOT NULL,
    creator_uid TEXT NOT NULL,
    tier_hierarchy INTEGER,
    reward_title TEXT NOT NULL,
    reward_content TEXT NOT NULL,
    reward_date TEXT NOT NULL,
    reward_tags TEXT,
    reward_pinned INTEGER NOT NULL DEFAULT 0,
    FOREIGN KEY (creator_uid) REFERENCES users (uid)
)
CREATE TABLE files (
    uid TEXT UNIQUE PRIMARY KEY NOT NULL,
    reference_uid TEXT NOT NULL,
    reference_type TEXT NOT NULL,
    file_name TEXT NOT NULL,
    file_type INTEGER NOT NULL DEFAULT 1,
    thumbnail BOOLEAN DEFAULT NULL
)

files表格

rewards表格

当前返回此

正如您在第二张图中所看到的那样,条件将返回两行,我想知道如何将这两行file_name列放入一个列表中,作为原始select中的第6列

jk9hmnmh

jk9hmnmh1#

可以使用group_concat()将多行折叠为一行。

相关问题