array_agg(t3.producttag_id ORDER BY t3.producttag_id)
FROM catalog_product_tags AS t3
WHERE t3.product_id = 1
возвращает например {2,3}
SELECT
array_agg(t3.producttag_id ORDER BY t3.producttag_id)
FROM catalog_product_tags AS t3
WHERE t3.product_id = 5
возвращает например {2,3,5}
и теперь , когда я объединяю запросы и делаю такой запрос
SELECT
t1.product_id AS origin_product_id,
t2.product_id AS alternative_product_id
FROM catalog_product_tags AS t1
INNER JOIN catalog_product_tags t2 ON t1.producttag_id = t2.producttag_id AND t1.product_id != t2.product_id
WHERE t1.product_id IN (1) AND t2.product_id NOT IN (1)
GROUP BY t1.product_id, t2.product_id
HAVING array_agg(t1.producttag_id ORDER BY t1.producttag_id) = (
SELECT
array_agg(t3.producttag_id ORDER BY t3.producttag_id)
FROM catalog_product_tags AS t3
WHERE t3.product_id = t1.product_id
)
мне позвращает
origin_product_id | alternative_product_id
------------------------------------------
1| 2
1| 5
то есть тут
HAVING array_agg(t1.producttag_id ORDER BY t1.producttag_id) = (
SELECT
array_agg(t3.producttag_id ORDER BY t3.producttag_id)
FROM catalog_product_tags AS t3
WHERE t3.product_id = t1.product_id
)
```
оно правильно сравнивает {2,3} = {2,3,5} ?
А что вы ожидали получить? Какова цель запроса?
Не должно. Вставьте это в SELECT-лист, будет сразу видно что оно там насчитало.
Ввиду того что идёт группировка по двум продукт айди - оно явно насчитало несколько иное нежели хотелось
Да чего гадать — вставь в запрос и посмотри.
Дык не мой запрос то
Обсуждают сегодня