【发布时间】:2013-04-09 21:55:25
【问题描述】:
我希望能够在具有许多JOINs 的复杂 SQL 查询中使用 PostgreSQL 中的unnest() 函数。这是示例查询:
SELECT 9 as keyword_id, COUNT(DISTINCT mentions.id) as total, tags.parent_id as tag_id
FROM mentions
INNER JOIN taggings ON taggings.mention_id = mentions.id
INNER JOIN tags ON tags.id = taggings.tag_id
WHERE mentions.taglist && ARRAY[9] AND mentions.search_id = 3
GROUP BY tags.parent_id
我想在这里消除taggings 表,因为我的mentions 表有一个名为taglist 的整数数组 字段,其中包含@ 的所有链接标签ID 987654326@.
我尝试了以下操作:
SELECT 9 as keyword_id, COUNT(DISTINCT mentions.id) as total, tags.parent_id as tag_id
FROM mentions
INNER JOIN tags ON tags.id IN (SELECT unnest(taglist))
WHERE mentions.taglist && ARRAY[9] AND mentions.search_id = 3
GROUP BY tags.parent_id
这可行,但会带来与第一个查询不同的结果。
所以我想做的是在JOIN 查询中使用SELECT unnest(taglist) 的结果来补偿taggings 表。
我该怎么做?
更新:taglist 与提及的相应标签 ID 列表相同。
【问题讨论】:
-
mentions table has an integer array field named taglist that includes tag ids of mention.请定义“包含”。taglist是否与提及的相应标签 ID 列表完全相同? -
是的,
taglist与提及的相应标签 ID 列表相同。我正在更新我的问题。
标签: sql postgresql join naming-conventions unnest