Mysql 如何获取整个数据库中的所有嵌套外键引用?
下面是表之间的关系示例Mysql 如何获取整个数据库中的所有嵌套外键引用?,mysql,sql,Mysql,Sql,下面是表之间的关系示例 A <- B <- C <- D // B is using one column of A as the foreign key column. // C is using one column of B as the foreign key column. ... 我在stackoverflow中搜索了这个部分答案,但是我很难使这个查询递归(或者嵌套、迭代)以获得整个数据库中的所有连接 如果您能给我一个提示,用信息\u schema或其他方法解决
A <- B <- C <- D
// B is using one column of A as the foreign key column.
// C is using one column of B as the foreign key column.
...
我在stackoverflow中搜索了这个部分答案,但是我很难使这个查询递归(或者嵌套、迭代)以获得整个数据库中的所有连接
如果您能给我一个提示,用
信息\u schema
或其他方法解决我的问题,我将非常感谢您的帮助。如果您使用的是MySQL 8+,递归CTE可能会在这里完成这项工作。递归连接条件是当前表引用递归中前一步的父级
WITH RECURSIVE cte AS (
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
FROM KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = 'yourSchema' AND TABLE_NAME = 'user3' AND COLUMN_NAME = 'id'
UNION ALL
SELECT k1.TABLE_SCHEMA, k1.TABLE_NAME, k1.COLUMN_NAME
FROM KEY_COLUMN_USAGE k1
INNER JOIN cte k2
ON k1.TABLE_NAME = k2.REFERENCED_TABLE_NAME AND
k1.COLUMN_NAME = k2.REFERENCED_COLUMN_NAME AND
k1.TABLE_SCHEMA = k2.REFERENCED_TABLE_SCHEMA
)
SELECT *
FROM cte;
这假定user3
是最开始的父表,主键列为id
。然后递归CTE构建外键链。我还假设您的模式是固定的。感谢您的帮助:)如果我可以使用MySQL 8或更高版本,我应该试试您的建议。
WITH RECURSIVE cte AS (
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
FROM KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = 'yourSchema' AND TABLE_NAME = 'user3' AND COLUMN_NAME = 'id'
UNION ALL
SELECT k1.TABLE_SCHEMA, k1.TABLE_NAME, k1.COLUMN_NAME
FROM KEY_COLUMN_USAGE k1
INNER JOIN cte k2
ON k1.TABLE_NAME = k2.REFERENCED_TABLE_NAME AND
k1.COLUMN_NAME = k2.REFERENCED_COLUMN_NAME AND
k1.TABLE_SCHEMA = k2.REFERENCED_TABLE_SCHEMA
)
SELECT *
FROM cte;