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



我有三个查询,都从同一个表和相同的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显然有效!我在不使用DISTINCT的情况下对每个单独的查询进行COUNT。感谢回答的人。

使用一个简单的联合:

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*/
union
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*/

最新更新