我可以检查两个子查询返回相同的结果而不使用存储过程吗?

时间:2011-05-18 12:43:07

标签: sql

我有一张这样的表:

ObjId OtherObjId active (bool)
1          5       0
1          7       1
1          9       0
2          6       0
...
...
...
54         5       0
54         7       1
54         9       0

这两个查询返回相同的结果:

select OtherObj2,active from MyTable where ObjId1 = 1;

select OtherObj2,active from MyTable where ObjId1 = 54;

我想运行一个查询,如果两个查询结果相同则返回true;如果不相同则返回false。

该表是一个配置表,如果两个对象具有相同的配置,我想轻松测试。我可以使用商店程序执行检查,但我想避免使用它。

我想不出用查询检查它的方法,我想知道是否可能。

任何提示?

感谢您的帮助。

4 个答案:

答案 0 :(得分:5)

不知道您的DBMS是否支持except,但如果确实如此,您可以使用此功能。

select OtherObjId, active
from MyTable
where ObjId = 1
except
select OtherObjId, active
from MyTable
where ObjId = 54

答案 1 :(得分:4)

你可以使用减号

(select OtherObj2,active from MyTable where ObjId1 = 1
minus
select OtherObj2,active from MyTable where ObjId1 = 54
)
union
(select OtherObj2,active from MyTable where ObjId1 = 54
minus
select OtherObj2,active from MyTable where ObjId1 = 1
)
如果结果相同,

不返回任何行。

(你需要这两个方法来查看query1是否有比query2更多的行,或者query2的行数是否多于query1)

答案 2 :(得分:2)

如果您的数据库支持设置操作,请使用EXCEPT(AKA MINUS):

select OtherObj2,active from MyTable where ObjId1 = 1
EXCEPT
select OtherObj2,active from MyTable where ObjId1 = 54

如果两者相同,这将导致空表。

答案 3 :(得分:0)

你可以尝试这样的事情。如果它返回任何记录,则查询结果不相同。如果它返回0条记录,则没有不匹配。

select 
    OtherObjId, 
    Active
from 
    MyTable
where
    ObjId in (1, 54)
group by
    OtherObjId, 
    Active
having COUNT(*) < 2