Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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 - Fatal编程技术网

如何在SQL中用两个表显示父/子关系

如何在SQL中用两个表显示父/子关系,sql,sql-server,Sql,Sql Server,我有两个SQL表UM_模块,UM_子模块 在UM_模块表的字段定义中 模块ID 名称 梅纽德 和UM_子模块子表字段定义 子模块ID 模块ID 名称 亚月 下面是两个表中的数据 SELECT ModuleID,Name FROM UM_Module SELECT SubModuleID,ModuleID,Name FROM UM_SubModule ModuleID Name ----------- -------------------------------------------

我有两个SQL表UM_模块,UM_子模块

在UM_模块表的字段定义中

模块ID 名称 梅纽德 和UM_子模块子表字段定义

子模块ID 模块ID 名称 亚月 下面是两个表中的数据

SELECT ModuleID,Name FROM UM_Module
SELECT  SubModuleID,ModuleID,Name FROM UM_SubModule

ModuleID    Name
----------- --------------------------------------------------
8           Menu Master
9           General Master
10          Master
11          Clients
12          Event Type

(5 rows affected)

SubModuleID ModuleID    Name
----------- ----------- --------------------------------------------------
1           8           Menu
2           8           Child Menu
3           9           Role
4           8           Area Management
5           9           Permission
6           9           Role User
7           9           Permission
8           9           Parent-Child Permission
9           9           User Permission
10          9           Role Permission

(10 rows affected)
预期结果

可以帮助我准备上面的输出查询吗

我正在准备一些查询,但没有得到我想要的确切结果

SELECT cdo.SubModuleID,parent.ModuleID,parent.Name ParentName,
CONCAT(parent.Name, ' - ', cdo.Name) AS ChildName
FROM UM_SubModule AS cdo
JOIN UM_Module AS parent
ON (cdo.ModuleID = parent.ModuleID)

//Query output
SubModuleID ModuleID    ParentName       ChildName                              
----------- ----------- ---------------- ---------------------------------------
1           8           Menu Master      Menu Master - Menu
2           8           Menu Master      Menu Master - Child Menu
3           9           General Master   General Master - Role
4           8           Menu Master      Menu Master - Area Management
5           9           General Master   General Master - Permission
6           9           General Master   General Master - Role User
7           9           General Master   General Master - Permission
8           9           General Master   General Master - Parent Child Permission
9           9           General Master   General Master - User Permission
10          9           General Master   General Master - Role Permission
您需要按如下方式进行联合:

SELECT cdo.SubModuleID,
       parent.ModuleID, 
       null as ParentName,
       cdo.Name AS ChildName
  FROM UM_SubModule AS cdo
  JOIN UM_Module AS parent
    ON cdo.ModuleID = parent.ModuleID
Union all
Select null, 
       moduleid, 
       name, 
       null
  From UM_Module
Order by moduleid, SubModuleID
除了Popeye的UNION ALL选项外,您还可以在应用程序中执行此操作。这样可以避免扫描父表两次:

选择v* 从UM_模块作为父模块 交叉应用 选择parent.ModuleID,parent.Name,child.SubModuleID,ChildName=child.Name 从UM_子模块作为子模块 其中child.ModuleID=parent.ModuleID 联合所有 选择parent.ModuleID、parent.Name、NULL、NULL v
感谢您的回答,我在执行查询Msg 4104,级别16,状态1,第7行时遇到错误。无法绑定多部分标识符cdo.ModuleID。很抱歉为您修复了此问题。你知道它是干什么的吗?谢谢,大力水手,它很有魅力
SELECT cdo.SubModuleID,
       parent.ModuleID, 
       null as ParentName,
       cdo.Name AS ChildName
  FROM UM_SubModule AS cdo
  JOIN UM_Module AS parent
    ON cdo.ModuleID = parent.ModuleID
Union all
Select null, 
       moduleid, 
       name, 
       null
  From UM_Module
Order by moduleid, SubModuleID