2016-10-26 78 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 | 
+---------+----------------+ 

原諒所選的數據類型。這只是一個例子。