Oracle select,如何从 PHP 中的 'where exists' 子查询访问值?

Oracle select, how to access values from 'where exists' subquery in PHP?

我在 Oracle 中有一个 select,它有子查询。我需要从 PHP 代码中的子查询访问值。

例如,我可以访问 F.FILE_NAME 和 F.ID,但我还需要访问 MI.ID 和 MCI.ITEM_ID。如何做到这一点?

    $select ="SELECT F.FILE_NAME, F.ID
                     FROM b_file F  where exists
                    (SELECT '1'from  b_medialib_collection_item MCI, b_medialib_item MI
                            WHERE MI.ID=MCI.ITEM_ID
                            AND F.ID=MI.SOURCE_ID
                    )";

我已经更新了查询,但现在的问题是 F.FILENAME 在 table 中有重复项。如果有具有相同 F.FILENAME 的行,我只需要 return 行一次。

   $select2 = "SELECT
           F.FILE_NAME,MCI.COLLECTION_ID, MI.DATE_UPDATE,F.ID
           FROM b_medialib_collection_item MCI
            INNER JOIN b_medialib_item MI ON (MI.ID=MCI.ITEM_ID)
            INNER JOIN b_file F ON (F.ID=MI.SOURCE_ID)
           ORDER BY MI.DATE_UPDATE DESC";

示例

ID  FILE_NAME
1   module.xls
2   doc.doc
3   foto.img
4   doc.doc

这是b_filetable的基本结构,我想做的是return只有b_filetable一条记录如果有有很多重复项 - 具有相同 FILE_NAME 的行。在这种情况下输出将是

1 module.xls
2 doc.doc
3 foto.img

您需要在查询下方使用连接

 SELECT F.FILE_NAME, F.ID as fid,MI.ID as mid,MCI.ITEM_ID
        FROM b_file F  
        inner join
        b_medialib_item MI
        on
        F.ID=MI.SOURCE_ID
        inner join
        b_medialib_collection_item MCI
        on 
        MI.ID=MCI.ITEM_ID
        where F.FILE_NAME in
        (select FILE_NAME from b_file group by FILE_NAME having count(FILE_NAME)>1)

编辑 检查下面的查询,它将 return 行如你所料

select FILE_NAME,fid, mid,ITEM_ID from 
(
SELECT F.FILE_NAME, F.ID as fid,MI.ID as mid,MCI.ITEM_ID, row_number() over(partition by FILE_NAME order by f.id ) as r_no
        FROM b_file F  
        inner join
        b_medialib_item MI
        on
        F.ID=MI.SOURCE_ID
        inner join
        b_medialib_collection_item MCI
        on 
        MI.ID=MCI.ITEM_ID)
        where r_no=1