douran7929 2014-05-09 02:43 采纳率: 100%
浏览 26
已采纳

来自3个表的Oracle Query

I am having problem when querying data from 3 tables (FABRICATION, FABRICATION_QC, AND WEIGHT) and using their values in the PHP. My query is like this:

select fabrication.*,master_drawing.weight,
                (select fabrication_qc.marking_qc from fabrication_qc where fabrication_qc.head_mark=fabrication.head_mark) MARKING_QC,
                (select fabrication_qc.marking_qc_date from fabrication_qc where fabrication_qc.head_mark=fabrication.head_mark) MARKING_QC_DATE,
                (select fabrication_qc.marking_qc_sign from fabrication_qc where fabrication_qc.head_mark=fabrication.head_mark) MARKING_QC_SIGN
                from fabrication,fabrication_qc,master_drawing
                where fabrication.head_mark = master_drawing.head_mark";

and when I do this in the PHP to get that data into a table,

while (($row = oci_fetch_array($fabParse, OCI_BOTH)) != false) 
    { 
        echo '<tr>';
            echo '<td>'.$row['PROJECT_NAME'].'</td>';
            echo '<td>'.$row['HEAD_MARK'].'</td>';
            echo '<td>'.$row['ID'].'</td>';

            var_dump($row['MARKING_QC']);

PROJECT_NAME, HEAD_MARK, and ID work fine. Only the dumped MARKING_QC shows NULL in the output.

Can anyone tell me what I'm doing wrong here?

  • 写回答

2条回答 默认 最新

  • drqyxkzbs21968684 2014-05-09 02:49
    关注

    I am assuming this is the query you really want:

    select f.*, md.weight,
           (select fqc.marking_qc from fabrication_qc fqc where fqc.head_mark = f.head_mark) as MARKING_QC,
           (select fqc.marking_qc_date from fabrication_qc fqc where fqc.head_mark = f.head_mark) as MARKING_QC_DATE,
           (select fqc.marking_qc_sign from fabrication_qc fqc where fqc.head_mark = f.head_mark) as MARKING_QC_SIGN
    from fabrication f join
         master_drawing md
         on f.head_mark = md.head_mark;
    

    This removes the reference fabrication_qc in the outer from clause. That simply causes an unnecessary cartesian product. I also introduced table aliases to make the query more readable. And, put in proper explicit join syntax rather than the implicit joins.

    You can further simplify this to:

    select f.*, md.weight,
           fqc.marking_qc, fqc.marking_qc_date, fqc.marking_qc_sign
    from fabrication f join
         master_drawing md
         on f.head_mark = md.head_mark left outer join
         fabrication_qc fqc
         on fqc.head_mark = f.head_mark
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料