如何根据同一列中的多个值选择行。 我想选择同时包含Apple和Orange的所有行ID e.g。
T1
ID Value
1 Apple
1 Orange
2 Apple
2 Kiwi
3 Pear
3 Berry
3 Orange
4 Apple
5 Apple
5 Orange
5 Kiwi
所以这是我的输出:
1
5
如何在“值”列上执行AND。此外,“值”列是clob类型。
答案 0 :(得分:0)
这样可行,但由于它扫描整个表两次,因此有点浪费。 “交叉”部分也不算太糟糕,因为它只在id的结果集上。
select id from t1 where dbms_lob.compare(value, to_clob('Apple')) = 0
intersect
select id from t1 where dbms_lob.compare(value, to_clob('Orange')) = 0;
如果你需要更快的性能(如果你有很多行并且clobs很大),也许这会更快(只扫描整个表一次):
with x (id, a, o) as (
select id, case dbms_lob.compare(value, to_clob('Apple')) when 0 then 1 end,
case dbms_lob.compare(value, to_clob('Orange')) when 0 then 1 end
from t1
)
select id
from x
group by id
having count(a) > 0 and count(o) > 0;
这仍然有些浪费,因为即使第一个dbms_lob.compare()
成功,也会执行第二个 <ldap-authentication-provider>
<password-compare hash="{ssha}"/>
</ldap-authentication-provider>
。如果您需要更快的性能,可以重写查询以避免这种重复。
像往常一样,您需要的性能越多,查询就越复杂。你需要决定两者之间的适当平衡。