2016-10-26 31 views
-1

我可以将表中的列作为表中另一列的外键吗?例如,如果一列是OrderId而另一列是RelatedOrderId,那么OrderId可能是RelatedOrderId的“外键”?这种关系背后的想法是,它会告诉谁在查看表中的那两列可以有重叠的值。SQL,同一表中的外键

+3

是的,你可以。表有时候会引用它们自己。 –

回答

2

这可能是接近你可以得到:

CREATE TABLE `a9` (
    `orderId` int(11) NOT NULL, 
    `relatedOrderId` int(11) DEFAULT NULL, 
    PRIMARY KEY (`orderId`), 
    KEY `abcd3` (`relatedOrderId`), 
    CONSTRAINT `abcd3` FOREIGN KEY (`relatedOrderId`) REFERENCES `a9` (`orderId`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

insert a9(orderId,relatedOrderId) values (1,null); -- success 
insert a9(orderId,relatedOrderId) values (2,3); -- Error 1452 
insert a9(orderId,relatedOrderId) values (2,1); -- success 

而参照完整性是不是在列relatedOrderId一个NULL非常强。但至少它暗示,如果不是NULL那么它是有效的。

要实现一个圆形参考,人们将需要做下面这似乎鱼腥。

insert a9(orderId,relatedOrderId) values (1,null); -- success 
insert a9(orderId,relatedOrderId) values (2,1); -- success 
update a9 set relatedOrderId=2 where orderId=1; -- success 

select * from a9; 
+---------+----------------+ 
| orderId | relatedOrderId | 
+---------+----------------+ 
|  2 |    1 | 
|  1 |    2 | 
+---------+----------------+ 

原谅所选的数据类型。这只是一个例子。