我正在尝试使用减号创建一个sql查询。
我有query1,返回28行,有2列 我有query2在查询2中返回22 row2和相同的2列。
当我创建一个查询query1减去查询2时,它应该只显示28-22 = 6行。 但是它显示了query1返回的所有28行。
请告知。
答案 0 :(得分:10)
尝试使用EXCEPT而不是MINUS。例如: 让我们考虑一个案例,你想要找出一个表中没有分配给你的任务(所以基本上你是想找到可以做的任务)。
SELECT TaskID, TaskType
FROM Tasks
EXCEPT
SELECT TaskID, TaskType
FROM Tasks
WHERE Username = 'Vidya'
这将返回尚未分配给您的所有任务。希望有所帮助。
答案 1 :(得分:6)
如果MINUS不适合你,你想要的一般形式是外部选择中的主要查询和非存在子句中另一个查询的变体。
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)
答案 2 :(得分:2)
字段可能不完全相同。可能是字段之一是char(10),另一个是char(20),它们都有字符串“TEST”。他们可能“看起来”一样。
如果您正在使用的数据库支持“INTERSECT”,请尝试此查询并查看完全匹配结果的数量。
select field1, field2 from table1
intersect
select field1, field2 from table2
要获得您期望的结果,此查询应该为您提供22行。
答案 3 :(得分:1)
类似的东西:
select field1, field2, . field_n
from tables
MINUS
select field1, field2, . field_n
from tables;
答案 4 :(得分:1)
MINUS的工作原理与设定操作相同。假设您已设置A和B, A = {1,2,3,4}; B = {3,5,6} 那么,A-B = {1,2,4}
如果A = {1,3,5}且B = {2,4,6} 那么,A-B = {1,3,5}。这里MINUS操作之前和之后的计数(A)将是相同的,因为它不包含与集合B的任何重叠项。
在类似的行上,可能是查询2中获得的结果集可能与query1的结果不匹配。因此,你仍然得到28行而不是6行。
希望这有帮助。
答案 5 :(得分:1)
它返回上层查询中的差异记录,这些记录未包含在第二个查询中。
以你的情况为例 A = {1,2,3,4,5 ... 28}和B = {29,30}然后A-B = {1,2,3 ...... 28}