【问题标题】:Oracle select, how to access values from 'where exists' subquery in PHP?Oracle select,如何从 PHP 中的“where exists”子查询访问值?
【发布时间】:2015-08-26 08:52:50
【问题描述】:

我在 Oracle 中有一个包含子查询的选择。我需要从 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 在表中有重复项。如果存在具有相同 F.FILENAME 的行,我只需要返回一次。

   $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_file 表的基本结构,如果有很多重复,我想做的是从 b_file 表中只返回一条记录 - 具有相同 FILE_NAME 的行。在这种情况下,输出将是

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

【问题讨论】:

  • 不能,需要使用join
  • 如果你想使用不同表中的字段,你必须加入他们
  • 添加GROUP BY (F.FILENAME)

标签: php oracle subquery


【解决方案1】:

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

 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)

编辑 检查下面的查询,它会按照我的预期返回行

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

【讨论】:

  • 谢谢,我更新了我的问题。我不需要重复的值
  • @MarciSM 我已更新我的查询,请立即查看。
  • 感谢您的帮助,但这也不起作用。这将返回所有具有重复值的行
  • 如果您发布示例行和所需的输出将对我更有帮助。
  • 正如您所提到的“如果存在具有相同 F.FILENAME 的行,我只需要返回一次行”这意味着 doc.doc 仅对吗?如果我错了,请给我更清楚
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多