如何在将复合键指定为外键之前对其进行安全检查?

时间:2017-03-24 16:34:23

标签: mysql

通常,当人们想要在填充的表上声明外键时,他们首先要确保外表具有创建外键的表中包含的所有值。

    select * from myschema.Orders
        where ProductID not in
            (select ProductID from myschema.Products);

如果从上述查询返回任何记录,则DBA首先必须在设置外键之前处理这些记录。但是如果Products表包含复合外键怎么办?如果Products表同时将ProductID字段和(例如)BatchNumber作为主键,那么上述检查将如何进行?

这假设Orders表也有两个字段。

1 个答案:

答案 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
        );