1

假设我有 3 张桌子。

项目
----------
项目 ID PK
子项目
----------
项目 ID PK  
子项目 ID PK

基本上,所有项目都列在“项目”表中。一个项目可以有子项目。例如,如果我的表中有以下行:

项目
----------
1
2
3
子项目
----------
1,2
1,3

项目 1、2 和 3 共有三个。项目 2 和 3 是项目 1 的子项目。

我有两个问题。首先,外键应该是 Projects 中的 projectId 引用 SubProjects 中的 projectId 和 subProjectId,还是外键应该是 subProjects 中的 projectId 引用 Projects 中的 projectId 和 subProjects 中的 subProjectId 引用 Projects 中的 projectId。

值得注意的是,一个项目可以是多个项目的子项目。

其次,如何通过查询获取项目的子项目。我一直在使用:


Select * from projects p1 Join subProjects sp Join projects p2 
where p1.projectId = sp.subProjectId and sp.subProjectId = p2.projectId;

我得到以下结果:

1 , 2
1 , 3

我希望它只是返回

2
3
4

3 回答 3

1

我相信您可能正在寻找一种自我参照关系,如
http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
中所述,在这种情况下,您将只有一个项目表中包含名为 parent_project_id 的外键,当项目是子项目时,该子项目使用该 parent_project_id 来指示其父项目。就外键而言,父级在其中没有任何对子级的引用。

于 2012-06-08T01:00:14.317 回答
0

For the second part, you will want to replace the * with the column name that 2,3 fall under. I don't see column names, so I am not sure if it is sp, p1 or p2.

于 2012-06-08T02:33:43.800 回答
0

有一个名为 SQLmaestro 的应用程序,您可以自动创建这些代码,我有很多时间使用它;生成 mysql 代码(表、连接、关节、自定义查询等)。

这是链接: http ://www.sqlmaestro.com/products/mysql/maestro/

于 2012-06-08T00:52:31.350 回答