Postgres - Невозможно объединить значения Json Array в UUID - PullRequest
1 голос
/ 29 сентября 2019

Итак, у меня есть одна таблица Profession:

UUID UUID,
Name TEXT

Где UUID - uuid1, uuid2, uuid3, etc.

Затем другая таблица Degrees:

 DegreeName TEXT,
 Record JSON

Где запись Record->'Professions' json может содержать список Profession.uuid, например {"Professions":"[uuid1,uuid2]"}, хотя поле может быть NULL, например {"Professions":"[]"}.

Вот как я пытаюсьсоедините две таблицы:

SELECT prof.uuid, prof.Name, d.DegreeName

FROM Profession prof
LEFT JOIN (
        SELECT DegreeName, json_array_elements(Record->'Professions') prof_uuid
        FROM  Degrees
    ) d
ON d.prof_uuid::TEXT=prof.uuid::TEXT

Когда я делаю это, я получаю только Нули. Обратите внимание, что я приведу к TEXT, потому что не могу привести массив Professions к UUID из-за пробелов.

Я попытался вручную найти таблицу Profession, используя значение из списка Professions, и она работает:

SELECT *
FROM Profession
WHERE uuid = 'someprofuuid'

Есть ли какой-то состав, который я пропустил?

1 Ответ

3 голосов
/ 29 сентября 2019

Я понял это. Проблема была в том, что я использовал json_array_elements вместо json_array_elements_text. Когда я это переключил, соединение сработало:

SELECT prof.uuid, prof.Name, d.DegreeName

FROM Profession prof
LEFT JOIN (
        SELECT DegreeName, json_array_elements_text(Record->'Professions') prof_uuid
        FROM Degrees
    ) d
ON d.prof_uuid::TEXT=prof.uuid::TEXT
...