postgres 中的反向关系

问题描述

我的数据库“textDate”中有表格

class TextData extends BaseEntity{
 
id(primaryGeneratedColumn)

ar:string

en:string

}

这个实体用于存储我的项目中的所有文本,如标题、描述和其他具有外键的字段

class object extends baseEntity{

id

@OnetoOne()
@joinColumn()
title:TextData
...

由于某些条件,我需要在文本数据中搜索并从中获取记录,并且我想获取具有 Fk 到此 textData 记录的对象 注意:有几种类型的对象可以访问文本数据 object1(title),car(title),career(title) 他们都有fk到文本数据...... 有什么可做的吗? 我做的

 select 'post' as Type,p3 .id 
from post p3  
where p3."tagsId" =any ('{1,2,3}') or p3."titleId" =any ('{1,3}') 
 join text_data td 
 on td.id =p3."titleId" as  titil
UNION  
select 'career' as Type,c2 .id 
from career c2 
join text_data td 
 on td.id =c2."titleId" as  titil
where c2."tagsId" =any ('{1,3}')

解决方法

您可以在 text_data 中保存对子表的引用,例如子表的名称。

您的查询有一些错误:

select 'post' as Type,p3.id 
from post p3  
join text_data td on td.id = p3."titleId"
where p3."tagsId" = any('{1,2,3}') or p3."titleId" = any('{1,3}')

UNION  

select 'career' as Type,c2.id 
from career c2 
join text_data td on td.id = c2."titleId" 
where c2."tagsId" = any('{1,3}')

另一种查询方式:

SELECT td.id,coalesce(p3.type,c2.type) AS type

FROM text_data td

INNER JOIN (SELECT "titleId",'post' AS type FROM post WHERE "tagsId" = any('{1,3}') or "titleId" = any('{1,3}')) AS p3 ON td.id = p3."titleId"

INNER JOIN (SELECT "titleId",'career' AS type FROM career WHERE "tagsId" = any('{1,3}')) AS c2 ON td.id = c2."titleId"