【发布时间】:2016-10-04 07:23:54
【问题描述】:
SQL Server 管理工作室 -
如何在 while 循环中联合?
ParentID 是与 ChildID 的内在关系
WHILE EXISTS (SELECT ParentID FROM Table1)
BEGIN
SELECT * FROM FinalTable WHERE FinalTableID = (SELECT c.ChildID FROM Table1 as c WHERE c.ChildID = (SELECT d.ChildID FROM Table1 as d WHERE d.ChildID = @MyCounter))
IF(SELECT e.ParentID FROM Table1 as e WHERE e.ChildID = @MyCounter) IS NULL
BREAK
ELSE
SET @MyCounter = (SELECT d.ParentID FROM Table1 as d WHERE d.ChildID = @MyCounter)
CONTINUE
END
此代码当前导致包含不同结果的多个行集合,是否可以将所有内容合并为一个完整的结果?
FinalTable
-------------------------------
| ID Name Text ChildID
| 1 1 Foo1 Bar1 1
| 2 2 oof1 Bra1 1
| 3 3 ofo1 Rab1 1
--------------------------------
FinalTable
--------------------
| ID Row2 Row3 ChildID
| 1 8 Foo2 Bar2 2
| 2 9 oof2 Bra2 2
| 3 10 ofo2 Rab2 2
--------------------
FinalTable
--------------------
| ID Name Text ChildID
| 1 14 Foo3 Bar3 3
| 2 17 oof3 Bra3 3
| 3 19 ofo3 Rab3 3
--------------------
想要的结果:
FinalTable
--------------------
| ID Name Text ChildID
| 1 1 Foo1 Bar1 1
| 2 2 oof1 Bra1 1
| 3 3 ofo1 Rab1 1
| 4 8 Foo2 Bar2 2
| 5 9 oof2 Bra2 2
| 6 10 ofo2 Rab2 2
| 7 14 Foo3 Bar3 3
| 8 17 oof3 Bra3 3
| 9 19 ofo3 Rab3 3
--------------------
【问题讨论】:
-
请标记您正在使用的 DBMS
-
您不需要
while循环。只需使用联合和row_number()即可在完整结果中生成唯一编号 -
@a_horse_with_no_name 我很想知道如何在没有 while 的情况下循环同一张表,您能否提出指导或解释?
-
@a_horse_with_no_name SQL Server 管理工作室,在页面顶部进行了编辑
-
childid和parentid来自哪里?它们不属于您展示的三个表格。
标签: sql sql-server tsql merge