我有一张这样的表:
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。
该表是一个配置表,如果两个对象具有相同的配置,我想轻松测试。我可以使用商店程序执行检查,但我想避免使用它。
我想不出用查询检查它的方法,我想知道是否可能。
任何提示?
感谢您的帮助。
答案 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