Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建与自身的SQL一对多关系_Sql_Sql Server_Linq To Sql_Foreign Keys - Fatal编程技术网

创建与自身的SQL一对多关系

创建与自身的SQL一对多关系,sql,sql-server,linq-to-sql,foreign-keys,Sql,Sql Server,Linq To Sql,Foreign Keys,我试图在表a上创建一对多的关系,并使用它自己的记录 我想我可以创建第二个表B,用两个外键链接到表a。这似乎是不够的,因为LINQ到SQL生成了一对一的关系。我错过了什么 一些上下文:表A包含标签,标签可以是标签的子标签 编辑:可能我需要一个多对多关系?SQL server不允许您为表创建外键,该表在删除级联时使用或更新级联时使用引用自身,因为这可能会导致循环或多个级联路径。但您可以在删除无操作时使用和更新无操作时使用创建外键 ALTER TABLE tagtablename ADD FOREIG

我试图在
表a
上创建一对多的关系,并使用它自己的记录

我想我可以创建第二个
表B
,用两个外键链接到
表a
。这似乎是不够的,因为LINQ到SQL生成了一对一的关系。我错过了什么

一些上下文:
表A
包含标签,标签可以是标签的子标签


编辑:可能我需要一个多对多关系?

SQL server不允许您为表创建外键,该表在删除级联时使用
或更新级联时使用
引用自身,因为这可能会导致循环或多个级联路径。但您可以在删除无操作时使用
和更新无操作时使用
创建外键

ALTER TABLE tagtablename ADD FOREIGN KEY ([parent_id]) REFERENCES [tagtablename] ([id]) ON DELETE NO ACTION ON UPDATE NO ACTION

假设您有一个包含以下列itemid和MasterID的表 在masterid列中,您有它链接到的项目的itemid

select a.Itemid,b.itemid  from table1 as a inner join table1 as b on a.Itemid=b.MasterID 
上述查询将给出如下结果:

a_itemid b_itemid 3020079 3020334 3020079 3020335 3045396 3045397 3045396 3045398 3045396 3045401 3020079 3577149 a_itemid b_itemid 3020079 3020334 3020079 3020335 3045396 3045397 3045396 3045398 3045396 3045401 3020079 3577149
您还需要使链接表B中的两个键成为该表的主键


此外,Linq2SQL似乎会根据密钥的名称生成属性。这给我带来了一些奇怪的名字。

请编辑您的问题以提供示例数据和预期输出听起来您需要类似于
ParentID
列的内容。。。。其中,对于子标记行,使用其父标记的ID填充。