我需要从3个表中返回父子关系,这些表分别用于底层,中层和顶层。到目前为止很简单,已经完成了:
SELECT -1 ParentID, ID + 100000 ID, txtName Value from tblLevel1
UNION
SELECT Level1ID + 100000 ParentID, ID + 50000 ID, txtName Value from tblLevel2
UNION
SELECT Level2ID + 50000 ParentID, ID ID, txtName Value from tblLevel3
我的问题是我需要添加另一个描述每个条目路径的字段。
对于第一个表,它是'-1; {id}) 对于第二个表格是'{Level1id}; {id}' 第三个表的查询应该返回'{Level1id}; {Level2id}; {id}'。问题是第三个问题。
表结构是:
级别1; ID int; txtName varchar(50)
级别2; ID int; Level1ID int; txtName varchar(50)
级别3; ID int; Level2ID int; txtName varchar(50)
如何在第3个表(Level3)上获取查询的完整路径?
这是当前的结果
ParentID ID Value
-1 100001 Test company
-1 100006 Company A
-1 100007 Company B
-1 100008 The Primary Client
-1 100009 Overseas Client 1
100001 50001 Distribution
100006 50016 Attributes
100007 50018 Attributes
100008 50019 Development
100009 50029 Database
50001 1 Balance Sheet
50001 7 Cash Flow Statement
50001 10 Income Statement
50016 20 Vehicles
50016 21 Drivers
50019 33 Health
50029 29 Database
答案 0 :(得分:2)
我会质疑你的数据库设计,因为每个“级别”的单独表对我来说似乎是一个坏主意。由于我不知道你的应用程序的所有细节,我现在假设它是如何必须的。此外,在ID中添加数字的整个业务在我看来就像是一个稍后会咬你的大笨蛋。
另一个更直接且更具约束力的问题是,您希望第三个结果集的列数与前两个结果集的列数不同。使用UNION运算符是不可能的。
如果你想在前两个查询中添加另一个列,那么你应该能够通过在3级和2级表之间加入来获得第1级ID来获得你想要的第三个查询。
答案 1 :(得分:1)
通过加入第3级选择中的level2来解决它:
SELECT -1 ParentID, ID + 100000 ID, txtName Value, '-1;'+ cast(ID as varchar(10)) nodePath from tblLevel1
UNION
SELECT Level1ID + 100000 ParentID, ID + 50000 ID, txtName Value, '-1;'+ cast(Level1ID as varchar(10))+ ';'+ cast(ID as varchar(10)) nodePath from tblLevel2
UNION
SELECT Level2ID + 50000 ParentID, ID ID, txtName Value '-1;'+ cast(p.Level1ID as varchar(10))+ ';'+cast(m.Level2ID as varchar(10))+ ';'+cast(m.ID as varchar(10)) nodePath from tblLevel3
inner join tblLevel2 p on p.ID = m.Level2ID
结果:
-1 100001 RRM Financial Master Templates -1;1
-1 100006 Company A -1;6
-1 100007 Company B -1;7
-1 100008 The Primary Client -1;8
-1 100009 Overseas Client 1 -1;9
100001 50001 Distribution -1;1;1
100006 50016 Attributes -1;6;16
100007 50018 Attributes -1;7;18
100008 50019 Development -1;8;19
100009 50029 Database -1;9;29
50001 1 Balance Sheet -1;1;1;1
50001 7 Cash Flow Statement -1;1;1;7
50001 10 Income Statement -1;1;1;10
50016 20 Vehicles -1;6;16;20
50016 21 Drivers -1;6;16;21
50019 33 Health -1;8;19;33
50029 29 Database -1;9;29;29