SQLite GROUP_CONCAT 与 INNER JOIN

问题描述 投票:0回答:1

我正在尝试在我的项目中实现标签系统。

  • 每个“引用”可以有多个标签,每个“标签”可以在多个引用中使用

因此,我有三个表,“quotes”、“tags”和“tag_instances”。

我正在尝试进行一个查询,返回有关报价的详细信息,包括包含所有标签的字符串。

这是我第一次尝试让它发挥作用:

SELECT
    quotes.*,
    GROUP_CONCAT(tags.title, ', ') AS quote_tags
FROM quotes
INNER JOIN tag_instances ON quotes.id = tag_instances.quote 
INNER JOIN tags ON tag_instances.tag = tags.id

但是,这会导致

tag_list
成为将所有标签与实例连接起来的字符串。我宁愿只在该行的报价上添加带有实例的标签。

我对 SQLite 不是特别熟悉,但我知道在 postgres 中,它会像这样完成:

SELECT 
    quotes.*
    STRING_AGG(tags.title, ', ') AS quote_tags
FROM quotes
INNER JOIN tag_instances ON quotes.id = tag_instances.quote
INNER JOIN tags ON tag_instances.tag = tag.id

欢迎任何将 postgres 风格的 sql 转换为 sqlite 的建议。

sqlite
1个回答
0
投票

我找到了一种使用子查询获得所需结果的方法:

SELECT
  quotes.*,
  (
    SELECT tags.title FROM tags
    INNER JOIN tag_instances ON tag_instances.tag = tags.id
    WHERE tag_instances.quote = quotes.id
  ) as quote_tags
FROM quotes
© www.soinside.com 2019 - 2024. All rights reserved.