Сравнить две строки-массива в sql

Рейтинг: 0Ответов: 1Опубликовано: 13.02.2023

Есть две строки: 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 с данными:

Москва
Тверь

И т.д.

Ответы

▲ 0Принят
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/