Sql 基于存储在另一个表中的列名获取值
我有以下表格:Sql 基于存储在另一个表中的列名获取值,sql,postgresql,Sql,Postgresql,我有以下表格: "DocumentSubject" ( "Id" SERIAL NOT NULL, "Description" text, "List1Left" text, "List1Right" text ); "DocumentRegistryAttributes" ( "Id" SERIAL NOT NULL, "DocumentSubjectId" integer, "Code" text, "WorkDetails" text, "Name"
"DocumentSubject"
(
"Id" SERIAL NOT NULL,
"Description" text,
"List1Left" text,
"List1Right" text
);
"DocumentRegistryAttributes"
(
"Id" SERIAL NOT NULL,
"DocumentSubjectId" integer,
"Code" text,
"WorkDetails" text,
"Name" text
);
在DocumentSubject
中有一个名为List1Left
的列,其中包含DocumentRegistryAttributes
表f.e.code
中的列名称。
我是否可以根据DocumentSubject
表中存储的字符串列名从DocumentRegistryAttributes
中检索列code
的值?
我需要这样的东西:
“DocumentRegistryAttributes”[“DocumentSubject”。“List1Left”]
您可以使用to_jsonb()
为“DocumentRegistryAttributes”
中的行创建一个JSON,列名作为键,然后从JSON中选择文本,其中键是“DocumentSubject.”“List1Left”中的文本
不相关,但是:您应该真正避免那些可怕的引用标识符。从长远来看,它们比它们的价值要麻烦得多。实际上,您正在实施实体属性值设计。现在,如果将DocumentRegistryAttributes
信息存储在DocumentSubject
表中的JSONB
列中,这将更加灵活(可能也更加高效)。我需要尝试这种方法,但我需要检索大量列,我不确定这样查询是否会更快,无论如何,这是一个很好的解决方案。谢谢@一匹没有名字的马:是的,没错。我编辑了答案。谢谢
SELECT *,
to_jsonb(dra)->>ds."List1Left"
FROM "DocumentSubject" ds
LEFT JOIN "DocumentRegistryAttributes" dra
ON dra."DocumentSubjectId" = ds."Id";