Oracle SQL合并多个查询的非重复结果

时间:2018-10-11 13:38:33

标签: sql oracle

我有三个查询,它们都从同一个表和相同的WHERE子句中选择相同的属性,但是每个查询都连接在不同的表上。不幸的是,我无法在该数据库中创建表。

我想要实现的是在结果中显示的三个查询之间没有重叠的结果。换句话说,如果查询1和查询2组合在一起,则只有查询2中在查询1中未返回返回的那些结果才应组合到输出中。

两个查询的示例:

  SELECT UNIQUE C.color
    FROM colors C INNER JOIN markers M ON M.color = C.color
   WHERE M.color NOT LIKE 'g%'
     AND M.hue NOT LIKE 'b%'
ORDER BY C.color ASC; /*this returns 2744 rows in my db*/

  SELECT UNIQUE C.color
    FROM colors C INNER JOIN pencils P ON P.color = C.color
   WHERE P.color NOT LIKE 'g%'
     AND P.hue NOT LIKE 'b%'
ORDER BY C.color ASC; /*this returns 4192 rows in my db*/

如果查询1返回:青色,橙色,紫色
查询2返回:金,橙,紫

然后我希望的结果是:青色,金色,橙色,紫色(又名UNIQUE修饰符),而不是:青色,金色,橙色,橙色,紫色,紫色

编辑:有人建议使用UNION来合并两者,因为它会返回不同的结果。因此,我进行了必要的语法更改,但结果仅返回了195行。我觉得这很奇怪。我希望至少有2744行(查询1的输出)+从查询2返回的,但不在查询1中的唯一值。

编辑2:没关系UNION显然起作用了!我在不使用COUNT的情况下对每个查询执行了DISTINCT。谢谢回答答案的人。

1 个答案:

答案 0 :(得分:0)

为此使用一个简单的联合:

import java.util.Scanner;

public class JavaApplication37 {

    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);  
        System.out.println("What's the interest rate?: ");
        int i = reader.nextInt(); 
        double t = (Math.log(2))/(Math.log(1+(i/100)));
        System.out.println("It takes " + t + " years before the amount has doubled");
    }
}