如何在sql中过滤以显示某些文本

时间:2013-04-19 15:19:19

标签: sql oracle oracle10g

我所在的地方

Select B.ID,
       B.TIME_1,
       B.TIME_2,
       a.event_type,
       a.jew,
       c.dist
from B, table1 a left outer join table3 c on a.jew = c.mew
Where B.ID = A.ID
AND a.event_type in ('APPLE','ORANGE','GRAPE')

我的问题是我的遗嘱没有显示,例如ID的某些记录不是全部3(苹果,橙子,葡萄)。我仍然想要提取所有ID,即使它没有全部3或没有Apple orange,Grape。

实施例: 假设我的数据库总共有5条记录

ID = 1的活动类型为AppleOrangeGrape也没有,但它还有其他我也不关心它 ID = 2 Apple
ID = 3 Orange
ID = 4 AppleOrange Grape
ID = 5没有3个,但其他我不在乎

所以目前我的查询只是拉ID = 1,我想修改它拉出所有5条件的位置。

2 个答案:

答案 0 :(得分:1)

您还需要对table1进行左连接,并在B和table1之间没有匹配时添加条件:

SELECT B.ID,
       B.TIME_1,
       B.TIME_2,
       A.event_type,
       A.jew,
       C.dist
FROM B
    LEFT OUTER JOIN table1 A 
        ON B.ID = A.ID
            LEFT OUTER JOIN table3 C 
                ON A.jew = C.mew
WHERE A.event_type IS NULL
OR A.event_type in ('APPLE','ORANGE','GRAPE')

答案 1 :(得分:1)

您想要三种事件类型中的任何一种或没有。为此,使用左外连接,但将所有条件放在on子句中:

SELECT B.ID, B.TIME_1, B.TIME_2, A.event_type, A.jew, C.dist
FROM B left outer join
     table1 A 
     ON B.ID = A.ID and
        A.event_type in ('APPLE','ORANGE','GRAPE') LEFT OUTER JOIN
     table3 C 
     ON A.jew = C.mew