【发布时间】:2020-01-27 21:07:14
【问题描述】:
我想查询q1,并在第二个查询q2 上使用q1 的结果。
我想显示q1和q2的所有列,以便结果基于一个公共列。
(如果标题不是很清楚,请告诉我)
下面的示例应在q1 中显示列 [id、publisher、author]。
我想将它们传递给q2,检索q1 的id 列中所有项目的属性[id、cited_id、category]。
作为结果,对于每个 id,我想显示所有被引用 ID 及其属性(包括 ID 和被引用 ID)。
或者,为了更清楚起见,也可以为每个 id 检索一个被引用的 ID 数组,在单独的查询中,我将用它们的属性装饰我的 id 和被引用的 ID。
还请就“性能”提出建议(我正在使用 bigquery,所以如果您能解释为什么解决方案更有效,有助于节省计算资源!)。
我想出了这个,但无法显示 q1 的所有列。
WITH q1 AS (
SELECT id, publisher, a.name
FROM `db.publications`,
UNNEST (publisher) as h,
UNNEST (author) as a
WHERE h Like '%penguin%'
)
SELECT p.id, c.id AS Cited, c.Category AS Cat
FROM `db.publications` AS p, UNNEST(citation) AS c
WHERE p.id IN (SELECT id from q1)
样本数据:
# result of q1
Row | Id | Publisher | Author
1 | item0 | penguin | Bob
2 | item0 | penguin | Alice
3 | item1 | penguin | Charlie
我想查找 q1 中每个唯一项目(item0,item1)引用的其他项目。
我希望得到一种可以以这种方式使用的方便格式的结果:
# Citations: books mentioned by item0, item1 ...
item0 : [item10, item15, item100]
item1 : [item23, item0, item101, item15]
..
# Decorators : information about each book:
Row | Id | Publisher | Author(s) |
我的问题是可以在一个查询中实现两者吗? 如果是这样,将两个单独的查询拆分为较低的计算资源是否方便或更好? 我的方法是首先查询一组书籍及其装饰器,然后使用 id 列表查找它们的引用。我无法将装饰器与上面的示例一起携带。
【问题讨论】:
-
样本数据和所需结果将提供更好的清晰度。
-
我不清楚表格中的数据最初是怎样的。你只有一两张桌子吗?你能举个例子吗? If is just one 您想要实现的目标可能只需要一个查询即可。
标签: sql performance google-bigquery with-statement