172 похожих чатов

Всем привет. Подскажите пожалуйста почему так происходит: SELECT

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} ?

5 ответов

7 просмотров

А что вы ожидали получить? Какова цель запроса?

Не должно. Вставьте это в SELECT-лист, будет сразу видно что оно там насчитало.

Ilya Anfimov
Не должно. Вставьте это в SELECT-лист, будет сраз...

Ввиду того что идёт группировка по двум продукт айди - оно явно насчитало несколько иное нежели хотелось

Похожие вопросы

Обсуждают сегодня

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
А дальше что?.. Записать в файл, потом в Код?.. И потом разбирать как-то?..
Хаскель Моисеевич Гопник
14
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
@y0zhig @shizzard А можно я опишу цель и может вообще ерланг мне не подходит. На текущий момент как я понимаю у ерланга есть легковесные потоки и задача выполняется в каком т...
Дмитрий Спиридонов
5
Есть предложения, как подобное можно упростить?
Hemul GM
12
У меня вопросик назрел. Почему, создав класс без наследования и реализации деструктора Destroy, деструктор не вызывался при free. Потом указал наследование от tobject и overri...
Сергей Бычков
9
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
Карта сайта