所以我有一张桌子:
UUID UUID,
Name TEXT
其中
Profession
是UUID
另一张桌子:
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