У меня есть несколько таблиц: вещи сделаны из частей.Детали могут быть разных цветов.Каждая вещь имеет цвет по умолчанию.И если детали не присвоен цвет, то она наследуется от вещи.
`colors`
id | color
1 | red
2 | green
3 | blue
`parts`
id | color_id
1 | 1
2 |
3 | 2
`things`
id | default_color | name
1 | 1 | first
2 | 2 | second
3 | 2 | third
`parts_has_things`
id | part_id | thing_id
1 | 1 | 1
2 | 2 | 1
3 | 3 | 1
4 | 1 | 2
5 | 2 | 2
6 | 3 | 2
7 | 1 | 3
И теперь, зная, какую именно вещь я хочу (детали и их цвета), я пытаюсь найтиэто в базе данных.
SELECT
things.id,
ARRAY_AGG(DISTINCT ARRAY[parts.id, coalesce(parts.color_id, things.default_color)
FROM things
JOIN parts_has_things ON parts_has_things.thing_id = things.id
JOIN parts ON parts.id = parts_has_things.part_id
HAVING
ARRAY_AGG(DISTINCT ARRAY[parts.id, coalesce(parts.color_id, things.default_color) @> ARRAY[ARRAY[1,1],ARRAY[2,1],ARRAY[3,2]]::BIGINT[][] AND
ARRAY_AGG(DISTINCT ARRAY[parts.id, coalesce(parts.color_id, things.default_color) <@ ARRAY[ARRAY[1,1],ARRAY[2,1],ARRAY[3,2]]::BIGINT[][]
результат:
1 | {{1,1}, {2,1}, {3,2}} //i want get only this item
2 | {{1,1}, {2,2}, {3,2}}
Как я могу сравнить массив массивов здесь?