常見問題,給一個記錄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')