Я строю массив из условия выбора в моем WHERE
состоянии
SELECT m.*
FROM users AS u
INNER JOIN microposts m ON u.id=m.user_id
INNER JOIN taggings t ON m.id=t.taggable_id
INNER JOIN tags t2 ON t2.id=t.tag_id
WHERE ARRAY(SELECT name FROM tags)::text[] @> ARRAY['hello']
Проблемная часть: WHERE ARRAY(SELECT name FROM tags)::text[]
Эта строка работает нормально, если я сравниваю ее с одиночное значение, например ARRAY['hello']
Но если это более одного значения, и мой ARRAY(SELECT name FROM tags)::text[]
должен собирать тот же массив, что и ARRAY['hello', 'gday']
, он не работает.
Мой оператор ARRAY(SELECT name FROM tags)::text[]
создает правильный массив? если нет, то почему?
Для ясности вот моя структура данных
Микросообщения
╔════════════════╤════════════════════╤═══════════╗
║ id │ user_id │ content ║
╠════════════════╪════════════════════╪═══════════╣
║ 1 │ 2 │ "hi" ║
╟────────────────┼────────────────────┼───────────╢
║ 2 │ 2 │ "gday" ║
╟────────────────┼────────────────────┼───────────╢
║ 3 │ 1 │ "yo" ║
╟────────────────┼────────────────────┼───────────╢
║ 4 │ 1 │ "mate" ║
╚════════════════╧════════════════════╧═══════════╝
Теги. ПРИМЕЧАНИЕ: taggable_id - это microposts.id
╔════════════════╤════════════════════╤═══════════╗
║ id │ taggable_id │ tag_id ║
╠════════════════╪════════════════════╪═══════════╣
║ 1 │ 1 │ 1 ║
╟────────────────┼────────────────────┼───────────╢
║ 2 │ 1 │ 2 ║
╟────────────────┼────────────────────┼───────────╢
║ 3 │ 1 │ 3 ║
╟────────────────┼────────────────────┼───────────╢
║ 4 │ 2 │ 3 ║
╚════════════════╧════════════════════╧═══════════╝
Таблица тегов
╔════════════════╤════════════╗
║ id │ name ║
╠════════════════╪════════════╣
║ 1 │ "sport" ║
╟────────────────┼────────────╢
║ 2 │ "cats" ║
╟────────────────┼────────────╢
║ 3 │ "bird" ║
╟────────────────┼────────────╢
║ 4 │ "diving" ║
╚════════════════╧════════════╝
EDITTTT: Пример Ok
Ввод пользователя ARRAY['sport', 'cats', 'bird']
Таким образом, исходя из наших таблиц, это коррелирует, чтобы дать нам taggings.tag_id
1, 2, 3, и у каждого есть taggings.taggable_id
1, что соответствует микросообщению. Так что это именно то, что я ввожу.