通常,当人们想要在填充的表上声明外键时,他们首先要确保外表具有创建外键的表中包含的所有值。
select * from myschema.Orders
where ProductID not in
(select ProductID from myschema.Products);
如果从上述查询返回任何记录,则DBA首先必须在设置外键之前处理这些记录。但是如果Products
表包含复合外键怎么办?如果Products表同时将ProductID
字段和(例如)BatchNumber
作为主键,那么上述检查将如何进行?
这假设Orders
表也有两个字段。
答案 0 :(得分:1)
在这种情况下,您可以使用NOT EXISTS
。
这样的事情:
select *
from myschema.Orders o
where not exists (
select ProductID
from myschema.Products p
where o.ProductID = p.ProductID
and o.BatchNumber = p.BatchNumber
);