6

我正在尝试用减号创建一个 sql 查询。

我有查询 1,它返回 28 行和 2 列 我有查询 2,它返回 22 行 2,查询 2 中有相同的 2 列。

当我创建查询 query1 减去查询 2 时,它应该只显示 28-22=6 行。但它显示了 query1 返回的所有 28 行。

请指教。

4

6 回答 6

10

尝试使用 EXCEPT 而不是 MINUS。例如:让我们考虑一种情况,您想找出表中尚未分配给您的任务(因此基本上您正在尝试查找可以执行的任务)。

SELECT TaskID, TaskType
FROM Tasks
EXCEPT
SELECT TaskID, TaskType
FROM Tasks
WHERE Username = 'Vidya'

这将返回所有尚未分配给您的任务。希望有帮助。

于 2013-05-08T11:57:11.990 回答
6

如果 MINUS 对您不起作用,您想要的一般形式是外部选择中的主查询和 not exists 子句中的其他查询的变体。

select <insert list of fields here>
from mytable a
join myothertable b 
on b.aId = a.aid
where not exists (select * from tablec c where a.aid = c.aid) 
于 2012-06-25T21:00:33.150 回答
2

这些字段可能并不完全相同。可能其中一个字段是 char(10),另一个是 char(20),它们都包含字符串“TEST”。他们可能“看起来”一样。

如果您正在处理的数据库支持“INTERSECT”,请尝试此查询,看看有多少是完全匹配的结果。

select field1, field2 from table1
intersect 
select field1, field2 from table2

要获得您期望的结果,此查询应为您提供 22 行。

于 2012-06-25T21:03:03.287 回答
1

像这样的东西:

select field1, field2, . field_n
 from tables
 MINUS
 select field1, field2, . field_n
 from tables;
于 2012-06-25T20:57:55.703 回答
1

它返回上层查询中不包含在第二个查询中的差异记录。

在您的情况下,例如 A={1,2,3,4,5...28} AND B={29,30} 然后 AB={1,2,3....28}

于 2015-01-06T16:01:43.500 回答
1

MINUS 的工作原理与它在集合操作中的工作原理相同。假设如果你已经设置了 A 和 B,A = {1,2,3,4}; B = {3,5,6} 那么,AB = {1,2,4}

如果 A = {1,3,5} 且 B = {2,4,6},则 AB = {1,3,5}。这里 MINUS 操作之前和之后的 count(A) 将是相同的,因为它不包含与集合 B 的任何重叠项。

在类似的行上,可能是在查询 2 中获得的结果集可能与查询 1 的结果没有匹配项。因此,您仍然得到 28 行而不是 6 行。

希望这可以帮助。

于 2014-03-11T06:53:00.303 回答