SQL 递归查询:通过子级条件查询父级和子级数据
要通过子级条件查询父级和子级数据,可以使用递归查询的方法来实现。\n\n假设有以下的表结构:\n\n\nTable: items\n+----+-----------+--------+\n| id | name | parent |\n+----+-----------+--------+\n| 1 | Item 1 | 0 |\n| 2 | Item 2 | 1 |\n| 3 | Item 3 | 1 |\n| 4 | Item 4 | 2 |\n| 5 | Item 5 | 2 |\n| 6 | Item 6 | 3 |\n| 7 | Item 7 | 3 |\n+----+-----------+--------+\n\n\n首先,可以使用递归查询获取所有满足子级条件的子级数据。假设子级条件是 name = 'Item 4',查询子级数据的SQL语句如下:\n\nsql\nWITH RECURSIVE subitems AS (\n SELECT id, name, parent\n FROM items\n WHERE name = 'Item 4'\n UNION ALL\n SELECT items.id, items.name, items.parent\n FROM items\n INNER JOIN subitems ON items.parent = subitems.id\n)\nSELECT *\nFROM subitems;\n\n\n以上SQL语句使用了递归查询的功能,通过递归地联接子级和父级数据,直到没有更多的父级数据为止。这样可以获取到所有满足子级条件的子级数据。\n\n接下来,要获取这些子级数据对应的父级数据,可以使用联接查询。查询父级数据的SQL语句如下:\n\nsql\nWITH RECURSIVE subitems AS (\n SELECT id, name, parent\n FROM items\n WHERE name = 'Item 4'\n UNION ALL\n SELECT items.id, items.name, items.parent\n FROM items\n INNER JOIN subitems ON items.parent = subitems.id\n)\nSELECT items.*\nFROM items\nINNER JOIN subitems ON items.id = subitems.parent;\n\n\n以上SQL语句使用了递归查询的结果作为子查询,通过联接查询获取满足子级条件的子级数据对应的父级数据。\n\n综合以上两个SQL语句,可以同时获取到满足子级条件的父级和子级数据:\n\nsql\nWITH RECURSIVE subitems AS (\n SELECT id, name, parent\n FROM items\n WHERE name = 'Item 4'\n UNION ALL\n SELECT items.id, items.name, items.parent\n FROM items\n INNER JOIN subitems ON items.parent = subitems.id\n)\nSELECT items.*\nFROM items\nINNER JOIN subitems ON items.id = subitems.parent\n\nUNION ALL\n\nSELECT *\nFROM subitems;\n\n\n以上的SQL语句将父级数据和子级数据合并在一起,可以满足通过子级条件查询父级和子级数据的需求。
原文地址: https://www.cveoy.top/t/topic/qm5e 著作权归作者所有。请勿转载和采集!