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
我在 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