天天看点

sql 递归查询所有的下级

<code>--&gt; 生成测试数据表: [tb]</code>

<code>IF OBJECT_ID(</code><code>'[Users]'</code><code>) </code><code>IS</code> <code>NOT</code> <code>NULL</code>

<code>    </code><code>DROP</code> <code>TABLE</code> <code>[Users]</code>

<code>GO</code>

<code>CREATE</code> <code>TABLE</code> <code>[Users] ([userid] [</code><code>int</code><code>],[username] [nvarchar](10),[parentUserId] [</code><code>int</code><code>],[parentUserName] [nvarchar](10))</code>

<code>INSERT</code> <code>INTO</code> <code>[Users]</code>

<code>SELECT</code> <code>'1'</code><code>,</code><code>'admin'</code><code>,</code><code>'0'</code><code>,</code><code>NULL</code> <code>UNION</code> <code>ALL</code>

<code>SELECT</code> <code>'2'</code><code>,</code><code>'aaaaa'</code><code>,</code><code>'1'</code><code>,</code><code>'admin'</code> <code>UNION</code> <code>ALL</code>

<code>SELECT</code> <code>'3'</code><code>,</code><code>'bbbbb'</code><code>,</code><code>'2'</code><code>,</code><code>'aaaaa'</code> <code>UNION</code> <code>ALL</code>

<code>SELECT</code> <code>'4'</code><code>,</code><code>'ddddd'</code><code>,</code><code>'3'</code><code>,</code><code>'bbbbb'</code>

<code>--&gt;SQL查询如下:</code>

<code>;</code><code>with</code> <code>t </code><code>as</code>

<code>(</code>

<code>  </code><code>select</code> <code>*,</code><code>level</code><code>=1 </code><code>from</code> <code>Users </code><code>where</code> <code>[parentUserId]=0</code>

<code>  </code><code>union</code> <code>all</code>

<code>  </code><code>select</code> <code>a.*,</code><code>level</code><code>+1 </code><code>from</code> <code>Users a </code><code>join</code> <code>t b </code><code>on</code> <code>a.parentUserId=b.userid</code>

<code>)</code>

<code>select</code> <code>* </code><code>from</code> <code>t </code><code>where</code> <code>[parentUserId]&lt;&gt;0</code>

<code>/*</code>

<code>userid      username   parentUserId parentUserName level</code>

<code>----------- ---------- ------------ -------------- -----------</code>

<code>2           aaaaa      1            admin          2</code>

<code>3           bbbbb      2            aaaaa          3</code>

<code>4           ddddd      3            bbbbb          4</code>

<code> </code> 

<code>(3 行受影响)</code>

<code>*/</code>