Если у меня есть две таблицы:
Users Labels
----- ------
id id
user_id
и пользователи и один ко многим на ярлыки.
Я хочу сказать: «Дайте мне всех пользователей с меткой = 1 или меткой =2, но не label = 3 ", поэтому пользователь с метками [1, 5, 6] будет действительным, [2, 5, 6] будет действительным, но [2, 3, 4] будет недействительным.
Как бы я поступил так?В настоящее время я использую array_agg
и unnest
, но я хотел бы сделать это без операций с массивами.
WITH (
SELECT user_id, ARRAY_AGG(id) as labels from label
) as labels_agg
SELECT id FROM users
LEFT JOIN labels_agg ON id=user_id
WHERE 1 in UNNEST(labels) and 2 in UNNEST(labels) and 3 not in UNNEST(labels)