sql 語句查所有父級


常見問題,給一個記錄ID,查出它的所有父級,直到頂級

使用SMSS,sql server,找到一個辦法.

思路是分兩步,先循環找到所有父級的ID,再用IN查出所有父級

列說明  ID=PK  ParentId = 上級ID  ParentId = 0 表示到頂級了

SQL語句 :

DECLARE @childrenId VARCHAR(32)     -- 要查找這個ID的所有父級
DECLARE @1parentIds VARCHAR(max) -- 所有父級的ID列表,最終拼成IN的條件.效果如: '111','222','333'

SET @1parentIds = ''''+@childrenId+''''      -- 也包含自己,一直到父級

WHILE @childrenId!='0'         -- 如果父級ID不是0就繼續查找
BEGIN
  SELECT @childrenId = ParentId FROM [table] WHERE  Id=@childrenId -- 根據ID找到這個記錄,將它的父ID賦值,這個父ID作為下一級的子ID查找
  SET @1parentIds= @1parentIds + ',' + '''' + @childrenId + ''''                    -- 拼接這個父ID
END

-- 由於拼接的字符串不能做IN的參數,所以想這個辦法將整個SQL拼成再執行之.

EXEC('SELECT * FROM [table] WHERE Id IN (' + @1parentIds + ')'+'ORDER by Id')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM