SQL在单个列上存在多个条件

时间:2019-04-10 14:38:58

标签: sql oracle join case

我需要使用WHERE子句显示表的记录,该子句又取决于另一列的值。

例如,从表dba_Segments中列出消耗> 200000字节的表和消耗> 100000字节的索引

下面是我尝试过的

select o1.segment_name,o1.bytes from dba_segments o1
inner join 
( select segment_name,bytes from dba_segments where segment_type='INDEX' and bytes>10000000) o2
on o1.segment_name=o2.segment_name where o1.segment_type='TABLE' and
o1.bytes>20000000;

输出为no rows selected,我相信WHERE子句互相抵消。

我想同时获得记录(表和索引)。

请提出实现这一目标的最有效方法。

尽管我是dba,但我不太擅长SQL。

2 个答案:

答案 0 :(得分:5)

您不需要加入,只需将两个条件与OR

组合即可
select segment_type, segment_name, bytes 
from dba_segments 
where (segment_type = 'INDEX' and bytes > 10000000)
   or (segment_type = 'TABLE' and bytes > 20000000);

答案 1 :(得分:1)

您可以不使用联接而是使用or条件来实现所需的目标:

SELECT
    segment_name,
    bytes
FROM
    dba_segments
WHERE
    (segment_type='INDEX' and bytes>10000000)
    OR
    (segment_type='TABLE' and bytes>20000000)