PostgreSQL:创建临时表,添加到主选择查询中,避免出现多行错误

时间:2018-07-23 19:25:07

标签: sql postgresql

再次,我正在努力了解SQL的工作方式。因此,我将向您说明我拥有的数据以及到目前为止所做的一切。

我有5张桌子:

贷款

loan

loan_role

loan role

法律人

legal_person

legal_person_attribute

legal_person_attribute

legal_person_attribute_key

legal_person_attribute_key

我想选择不同的列,其中属性键选择我想要的值列。我所做的是这样:

select l.id as loan_nr, l.country, l.currency, l.principal_amount, l.duration, l.nominal_interest_rate, l.annuity, l.payout_date                              ,
       (select lpa.value as company_name
        from etl.legal_person_attribute lpa, etl.legal_person_attribute_key lpak
        where lpa.fk_legal_person_attribute_key = lpak.id and lpak.attribute_key = 'companyName'
       )
from etl.loan l
where l.country ='DE'

但是,它返回此错误:

  

错误:用作查询的子查询返回的一行以上

单独尝试,该查询有效。

select lpa.value as company_name
from etl.legal_person_attribute lpa, etl.legal_person_attribute_key lpak                            
where lpa.fk_legal_person_attribute_key = lpak.id and lpak.attribute_key = 'companyName'    

你会怎么做?也许使用临时表(我真不知道该怎么做)?可能是加盟问题吗?

提前谢谢!

更多信息:

我放置的图像是我正在使用的表格的一些示例,只是为了说明它们的状态。

查询不完整,因为我不知道如何完成查询。

我想要的是一个带有主要选定列的表,然后添加子查询,我想为每个值检索一个列。

我已经做到了:

select l.id as loan_nr, l.country, l.currency, l.principal_amount, l.duration, l.nominal_interest_rate, l.annuity, l.payout_date, 
(select lpa.value from etl.legal_person_attribute lpa, etl.legal_person_attribute_key lpak where lpa.fk_legal_person_attribute_key = lpak.id and lpak.id = '180'
)as postcode
from etl.loan l,
etl.loan_person_role lpr,
etl.legal_person lp,
etl.legal_person_attribute lpa, 
etl.legal_person_attribute_key lpak
where l.id = lpr.loan_id and lp.id_user = lpr.fk_legal_person and lpa.fk_user = lp.id_user and lpa.fk_legal_person_attribute_key = lpak.id and 
--lpak.id = '180'and
l.profit_center='SME' and 
l.country='DE' and 
l.payout_date::DATE <= (date_trunc('month', current_date)-'1sec'::interval)::DATE
group by l.id, l.country, l.currency, l.principal_amount, l.duration, l.nominal_interest_rate, l.annuity, l.payout_date, lpa.value
limit 100 

还是同样的问题。可能是由于value列垂直存储了所有数据,我想将其提取到不同的列中,并根据属性键为它们指定不同的名称吗?

0 个答案:

没有答案