我有一个以下结构表
父ID号,子ID号,地址varchar2(100)
我想写一个通过搜索地址字段来提取所有记录的SQL。
只有扭曲,即使其中一个{child}的{address}条件匹配,我也希望{parent id}组合的所有记录。
我知道我们会用这种方式对此进行编码,
SELECT parent_id, child_id, address
FROM mytable t
WHERE EXISTS
(SELECT 1
FROM mytable t2
WHERE t.parent_id = t2.parent_id
AND address LIKE :p_search_criteria);
但还有比这更好的解决方案吗?关键是我们正在我们从...中检索的同一个表中搜索。
这是Oracle数据库10g企业版10.2.0.4.0版 - 64位
答案 0 :(得分:1)
如果您愿意,可以使用分析函数执行此操作:
SELECT parent_id, child_id, address
FROM (select t.*,
max(case when address LIKE :p_search_criteria then 1 else 0 end) over
(partition by parent_id) as addrflag
from mytable t
) t
WHERE addrflag = 1;
如果您拥有正确的索引,那么exists
版本可能会更快。
答案 1 :(得分:0)
我本身并不熟悉Oracle,但是使用标准的SQL查询,你能不能做到以下几点?
SELECT t.parent_id, t.child_id, t.address
FROM mytable t LEFT JOIN
mytable t2 on t.parent_id=t2.parent_id
where t2.address LIKE :p_search_criteria;