我想sql子查询有3个表的信息,不幸的是我有这个错误
列不属于引用表。
动态SQL错误。
SQL错误代码= -206 专栏未知。
NOM_CLIENT。
在第7行第12栏。
`select
f.fact_n,
f.fact_dos_n,
poste_facture,
montant_produits,
date_ouverture_dos,
nom_client,
adresse_client
from factures f
left outer join
--detail facture par poste facturation
( select
facture_detail.fact_n,
facture_detail.factd_poste_fact as poste_facture,
sum(facture_detail.factd_produits) as montant_produits
from facture_detail
GROUP BY facture_detail.fact_n,facture_detail.factd_poste_fact
)fact_d on (f.fact_n = fact_d.fact_n )
--information client et dossier
left outer join
--debut niveau dossier
(select
dos.dos_n as dos_n,
dos.dos_date_ouvr as date_ouverture_dos
from dossiers dos
left outer join
--debut niveau client
(select
cl.cl_n ,
cl.cl_nom as nom_client,
cl.cl_adresse as adresse_client
from clients cl
--fin niveau client
)cl on(dos.dos_cl_n=cl.cl_n)
--fin niveau dossier
)dos on (f.fact_dos_n = dos.dos_n )
--fin niveau facture
where f.fact_n=:AFACT_N`
答案 0 :(得分:0)
试试这个..
select
f.fact_n,
f.fact_dos_n,
poste_facture,
montant_produits,
date_ouverture_dos,
nom_client,
adresse_client
from factures f
left outer join
--detail facture par poste facturation
( select
fd.fact_n,
fd.factd_poste_fact as poste_facture,
sum(fd.factd_produits) as montant_produits
from facture_detail fd
GROUP BY fd.fact_n,fd.factd_poste_fact
)fact_d on (f.fact_n = fact_d.fact_n )
--information client et dossier
left outer join
--debut niveau dossier
(select
dos.dos_cl_n as dos_cl_n
dos.dos_n as dos_n,
dos.dos_date_ouvr as date_ouverture_dos
from dossiers dos
left outer join
--debut niveau client
(select
cl.cl_n ,
cl.cl_nom as nom_client,
cl.cl_adresse as adresse_client
from clients cl
--fin niveau client
)cl on(dos.dos_cl_n=cl.cl_n)
--fin niveau dossier
)dos1 on (f.fact_dos_n = dos1.dos_n )
--fin niveau facture
where f.fact_n=:AFACT_N
答案 1 :(得分:0)
你应该inner join
而不是left outer join
select
f.fact_n,
f.fact_dos_n,
poste_facture,
montant_produits,
date_ouverture_dos,
nom_client,
adresse_client,
fd.fact_n,
fd.factd_poste_fact as poste_facture,
sum(fd.factd_produits) as montant_produits,
dos.dos_n as dos_n,
dos.dos_date_ouvr as date_ouverture_dos,
cl.cl_n ,
cl.cl_nom as nom_client,
cl.cl_adresse as adresse_client
from factures f
inner join facture_detail fd
on f.fact_n = fd.fact_n
inner join dossiers dos
on f.fact_dos_n = dos.dos_n
inner join clients cl
on dos.dos_cl_n=cl.cl_n
where f.fact_n=:AFACT_N
GROUP BY
fd.fact_n,fd.factd_poste_fact
注意:强>
Inner join
仅生成表A和表B中匹配的记录集。
Left outer join
从表A中生成一组完整的记录,其中包含表B中的匹配记录(如果可用)。如果没有匹配,则右侧将包含null。
INNER JOIN
LEFT OUT JOIN