我正在尝试用减号创建一个 sql 查询。
我有查询 1,它返回 28 行和 2 列 我有查询 2,它返回 22 行 2,查询 2 中有相同的 2 列。
当我创建查询 query1 减去查询 2 时,它应该只显示 28-22=6 行。但它显示了 query1 返回的所有 28 行。
请指教。
我正在尝试用减号创建一个 sql 查询。
我有查询 1,它返回 28 行和 2 列 我有查询 2,它返回 22 行 2,查询 2 中有相同的 2 列。
当我创建查询 query1 减去查询 2 时,它应该只显示 28-22=6 行。但它显示了 query1 返回的所有 28 行。
请指教。
尝试使用 EXCEPT 而不是 MINUS。例如:让我们考虑一种情况,您想找出表中尚未分配给您的任务(因此基本上您正在尝试查找可以执行的任务)。
SELECT TaskID, TaskType
FROM Tasks
EXCEPT
SELECT TaskID, TaskType
FROM Tasks
WHERE Username = 'Vidya'
这将返回所有尚未分配给您的任务。希望有帮助。
如果 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)
这些字段可能并不完全相同。可能其中一个字段是 char(10),另一个是 char(20),它们都包含字符串“TEST”。他们可能“看起来”一样。
如果您正在处理的数据库支持“INTERSECT”,请尝试此查询,看看有多少是完全匹配的结果。
select field1, field2 from table1
intersect
select field1, field2 from table2
要获得您期望的结果,此查询应为您提供 22 行。
像这样的东西:
select field1, field2, . field_n
from tables
MINUS
select field1, field2, . field_n
from tables;
它返回上层查询中不包含在第二个查询中的差异记录。
在您的情况下,例如 A={1,2,3,4,5...28} AND B={29,30} 然后 AB={1,2,3....28}
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 行。
希望这可以帮助。