Sql-Server
連接兩個表,每個主鍵包含父表中的一行
我有一個簡單的主鍵和外鍵連接……但我需要在每個主鍵的結果中包含父表中的一行,作為子項的一種標題行。例如,我有兩張桌子,
parents ID | Name 0 | FOO 1 | BAR 2 | ASD children ID | Name | ParentID 10 | baz | 0 11 | zap | 0 12 | zam | 1 13 | maz | 1
我想做一個返回的視圖
ParentID | ChildID | Name | isChild 0 | | FOO | False 0 | 10 | baz | True 0 | 11 | zap | True 1 | | BAR | False 1 | 12 | zam | True 1 | 13 | maz | True 2 | | ASD | False
資料結構沒有多大意義,但它填充了 3rd 方軟體,這是唯一的格式選項。現在我正在為每個父母添加一個額外的查詢來訪問數據庫。我想把它放到一個查詢中會更有效率,我只有幾百個父母
謝謝!
也許我錯過了一些東西,但我不明白為什麼這不是一個簡單的
UNION
.--Demo setup Declare @Parent table (ID int, Name varchar(30)) insert into @Parent(id, Name) values(0,'FOO'),(1,'BAR'),(2,'ASD') Declare @Children table (ID int, Name varchar(30),ParentId int) insert into @Children(id, Name,ParentId) values(10,'bas',0),(11,'zap',0),(12,'zam',1),(13,'maz',1) --The solution ;with UnionedData as ( SELECT ID AS ParentId ,' ' AS ChildID ,NAME ,'False' AS isChild FROM @Parent UNION ALL SELECT p.Id ,convert(VARCHAR(5), c.id) AS ChildID ,c.NAME ,'True' AS IsChild FROM @Parent p JOIN @Children c ON c.ParentId = p.id ) SELECT * FROM UnionedData ORDER BY ParentId ,ChildID
| ParentId | ChildID | NAME | isChild | |----------|---------|------|---------| | 0 | | FOO | False | | 0 | 10 | bas | True | | 0 | 11 | zap | True | | 1 | | BAR | False | | 1 | 12 | zam | True | | 1 | 13 | maz | True | | 2 | | ASD | False |