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-лист, будет сразу видно что оно там насчитало.
Ввиду того что идёт группировка по двум продукт айди - оно явно насчитало несколько иное нежели хотелось
Да чего гадать — вставь в запрос и посмотри.
Дык не мой запрос то
Обсуждают сегодня