获取所有值不在同一个表和另一个表的另一列中

时间:2013-10-09 09:05:43

标签: sql oracle

我希望获得不在同一个表的其他列和另外两个表的其他列中的所有索引 我的查询工作正常 有没有其他方法可以更快地获得相同的结果?

SELECT Index
        FROM temptable A
        WHERE NOT EXISTS(select 1 
                            from temptable B
                            where A.Index = B.Index2) 
        AND NOT EXISTS (SELECT 1
                            FROM temptable2 B
                            WHERE A.Index = B.INDEX) 
        AND NOT EXISTS (SELECT 1
                            FROM temptable3 B
                            WHERE A.Index = B.INDEX) 
        AND type = 'G';

3 个答案:

答案 0 :(得分:0)

看看这个example

用左连接替换不存在的位置将为您提供更好的性能

答案 1 :(得分:0)

我不知道这是否会更快地获取数据,但它将取决于在索引列上创建的索引。如果索引列是主键,那么它肯定会INDEX FAST FULL SCAN即使对于唯一/非唯一索引它会返回这样的结果。

 SELECT Index
    FROM temptable A
 WHERE  type = 'G';
 MINUS   
  (select index2 
     from temptable B
    union  
    SELECT index
    FROM temptable2 B
    union
    SELECT index
    FROM temptable3 B
   ) ;

答案 2 :(得分:0)

你可以试试这个:我没有测试过,因为我没有资源

SELECT
      TABLE1.INDEX
FROM
          (SELECT INDEX FROM TEMPTABLE WHERE TYPE = 'G') TABLE1
      LEFT OUTER JOIN TEMPTABLE TT1 ON TABLE1.INDEX = TT1.INDEX2
      LEFT OUTER JOIN TEMPTABLE2 TT2 ON TABLE1.INDEX = TT2.INDEX
      LEFT OUTER JOIN TEMPTABLE3 TT3 ON TABLE1.INDEX = TT3.INDEX
WHERE
      TT2.COLUMNB IS NULL;

Add indexes on the `columns TEMPTABLE.INDEX, TEMPTABLE.INDEX2, TEMPTABLE2.INDEX, TEMPTABLE3.INDEX`