所以我有一张桌子:

UUID UUID,
Name TEXT

其中ProfessionUUID
另一张桌子:
 DegreeName TEXT,
 Record JSON

其中,uuid1, uuid2, uuid3, etc.json记录可能包含一个Degrees列表,例如Record->'Professions',但字段可以是Profession.uuid例如{"Professions":"[uuid1,uuid2]"}
以下是我试图加入这两个表的方式:
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

当我这样做的时候,我只能得到零。注意,我之所以转换为NULL是因为我不能将{"Professions":"[]"}数组转换为TEXT是因为空格。
我已经尝试使用Professions列表中的值手动搜索UUID表,它可以工作:
SELECT *
FROM Profession
WHERE uuid = 'someprofuuid'

我丢了一些石膏吗?

最佳答案

我想出来了。问题是我用的是json_array_elements而不是json_array_elements_text。当我切换时,join工作了:

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

08-05 02:06