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

Sql 获取不在同一表和另一表的另一列中的所有值,sql,oracle,Sql,Oracle,我想得到不在同一个表的其他列和其他两个表的其他列中的所有索引。 我的问题很有效。 有没有其他方法可以更快地获得相同的结果? 看看这个 用left join替换where not exist将给您带来更好的性能我不知道这是否会更快地获取数据,但这取决于在索引列上创建的索引。如果索引列是主键,则它肯定会进行索引快速完全扫描,即使是唯一/非唯一索引,它也会返回这样的结果 SELECT Index FROM temptable A WHERE type = 'G'; MINUS

我想得到不在同一个表的其他列和其他两个表的其他列中的所有索引。 我的问题很有效。 有没有其他方法可以更快地获得相同的结果? 看看这个


用left join替换where not exist将给您带来更好的性能

我不知道这是否会更快地获取数据,但这取决于在索引列上创建的索引。如果索引列是主键,则它肯定会进行索引快速完全扫描,即使是唯一/非唯一索引,它也会返回这样的结果

 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
   ) ;

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

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`

你所说的索引是什么意思?是Oracle索引还是名为index的列名?使用Oracle Reserved关键字作为列名确实是个坏主意。忽略这一点,我在我的项目中没有使用该名称。@user2257655:我认为这很好,我不知道,但是,如果表的所有索引列上都有索引,它将更快地获取数据。@user2257655:索引列中有索引吗?
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`