我正在尝试在我的项目中实现标签系统。
因此,我有三个表,“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 的建议。
我找到了一种使用子查询获得所需结果的方法:
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