在select查询中选择sql

时间:2014-07-08 10:42:56

标签: sql oracle

我正在使用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%'

但我认为我的语法不对。提前谢谢。

1 个答案:

答案 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"别名,您将获得笛卡尔结果集。