Сравнить две строки-массива в sql
Есть две строки: word1 и word2
Внутри них массив неких данных связанных между собой например:
CREATE TABLE logs (
word1 string,
word2 string
);
INSERT INTO logs (Word1, Word2)
VALUES ('['location','title','value']', ['Москва','заголовок1','34']);
INSERT INTO logs (Word1, Word2)
VALUES ('['title','value','location']', ['Заголовок999','574584','Тверь']);
То есть каждый по порядку элемент в первой строке по своему номеру в массиве привязан к значению в другом массиве второй строки.
Вопрос: как мне определить номер в массиве значения например location в первой строке, и соотнести его с таким же порядковым номером в массиве из второй строки, при том что порядок слов и их значение в массиве может меняться?
На выходе если брать поле location исходя из примера выше нужно получить поле location с данными:
Москва
Тверь
И т.д.
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
CREATE TABLE logs (
word1 VARCHAR[3],
word2 VARCHAR[3]
);
INSERT INTO logs (Word1, Word2) VALUES
('{"location","title","value"}', '{"Москва","заголовок1","34"}'),
('{"title","value","location"}', '{"Заголовок999","574584","Тверь"}');
SELECT *,
array_position(Word1, 'location') location_position,
Word2[array_position(Word1, 'location')] location_value
FROM logs;
| word1 | word2 | location_position | location_value |
|---|---|---|---|
| {location,title,value} | {Москва,заголовок1,34} | 1 | Москва |
| {title,value,location} | {Заголовок999,574584,Тверь} | 3 | Тверь |
https://sqlize.online/sql/psql15/a8f10c996dfb9a95bfda968c9eeccfa3/