Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何获取整个数据库中的所有嵌套外键引用?_Mysql_Sql - Fatal编程技术网

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;