我正在使用plsql developer with oracle db
我试图从一些选择中进行选择。
select *
from (select max(mrs.no), mrs.material_id
from material_route_step mrs, documents d
where d.document_id(+) = mrs.document_id
and mrs.prod_order_id = 121673
and d.document_type_id = 1
and mrs.unit_id = 2606
group by mrs.material_id) as sa,
material_route_step mrs1,
documents d1
where mrs1.material_id = sa.material_id
and mrs1.no = sa.no
and d.name like '%N%'
但我认为我的语法不对。提前谢谢。
答案 0 :(得分:1)
看起来像你的" d.name"引用可能不正确,因为" d"别名在您的内部查询与您的OUTER查询中的d1 ...也许应该是" d1.name",但您也应该包括文档ID的左外连接(+)引用否则你会有笛卡尔结果。
where
mrs1.material_id = sa.material_id
and mrs1.no = sa.no
and d1.document_id(+) = mrs1.document_id
and d1.name like '%N%'
但是,为了更好地提供答案,我将尝试通过编写我想要的内容来回答,然后通过查询来获得答案。由于您正在寻找最大的" mrs.no",这意味着您希望通过Oracle的(+)=语法来加入JOIN而不是左连接,但对于特定产品,文件类型和单位。找到后,将每个文档名称与材料路径相关联。
select
*
from
( select
mrs.material_id,
max( mrs.no ) as maxno
from
material_route_step mrs
JOIN documents d
on mrs.document_id = d.document_id
AND d.document_type_id = 1
where
mrs.prod_order_id = 121673
and mrs.unit_id = 2606
group by
mrs.material_id ) PreQuery
JOIN material_route_step mrs2
on PreQuery.material_id = mrs2.material_id
AND PreQuery.maxno = mrs2.no
JOIN documents d2
on mrs2.document_id = d2.document_id
不在外部文件上应用连接条件" d1"别名,您将获得笛卡尔结果集。