跨越表的SQL命令

时间:2016-02-01 04:10:49

标签: sql postgresql

我有这些表格(authorsquotestagsquotes_tags),我想对随机引号列表进行单一查询与他们适当的作者和标签(许多)信息。

这是我现在所拥有的,但标签正在被压扁,只返回一个。我将如何使用返回为json的标签或任何适当的约定来返回这组引号的查询?

SELECT  *
  FROM quotes
  JOIN authors ON quotes.author_id = authors.id
  JOIN tags ON tags.id = quotes.id
  ORDER BY RANDOM()
  LIMIT 50

我得到以下内容:

author | quote | tags
---------------------
john   | lorem | hey
brian  | lorem | test

但我喜欢以下内容:

author | quote | tags
-------------------------------
john   | lorem | hey, another (or whatever convention for a list -- json?)
brian  | lorem | test, one, two

1 个答案:

答案 0 :(得分:0)

在版本8.4及更高版本中,您可以使用array_agg

SELECT a.author, q.quote, array_agg(t.tags)
FROM quotes q
INNER JOIN authors a
    ON q.author_id = a.id
INNER JOIN tags t
    ON t.id = q.id
GROUP BY a.author, q.quote
ORDER BY RANDOM()