Я хочу иметь возможность использовать функцию unnest()
в PostgreSQL в сложном SQL-запросе, который имеет много JOIN
. Вот пример запроса:
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, которое состоит из всех связанных идентификаторов тегов mentions
.
Я пробовал следующее:
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
Это работает, но дает другие результаты, чем первый запрос.
Итак, что я хочу сделать, так это использовать результат SELECT unnest(taglist)
в запросе JOIN
, чтобы компенсировать таблицу taggings
.
Как я могу это сделать?
ОБНОВЛЕНИЕ: taglist
— это тот же набор, что и соответствующий список идентификаторов тегов упоминания.
mentions table has an integer array field named taglist that includes tag ids of mention.
Укажите, что включает. Является лиtaglist
точно таким же набором, что и соответствующий список идентификаторов тегов упоминания? - person Erwin Brandstetter   schedule 18.04.2013taglist
— это тот же набор, что и соответствующий список идентификаторов тегов упоминания. Я обновляю свой вопрос. - person İlker İnanç   schedule 18.04.2013