Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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
可以在InnoDB表中使用Mysql外键进行反向查找吗?_Mysql_Innodb - Fatal编程技术网

可以在InnoDB表中使用Mysql外键进行反向查找吗?

可以在InnoDB表中使用Mysql外键进行反向查找吗?,mysql,innodb,Mysql,Innodb,我想知道是否可以在Mysql(InnoDB)中使用FK进行反向查找 原因是——我想从数据库中读取类似XML的结构(每个“层”使用一个表),但能够动态地执行此操作。我希望能够通过添加新表和设置FK约束来更新xml结构 为了澄清,假设我们有一个表“parent”,带有and id(parent_id)和另外两列(k1和k2)。xml看起来像(省略id): v1 v2 现在,我们添加了一个子表,其中外键引用了parent_id和另一列(ck1)。相同的查询(随后进行一些处理)现在应该给出: <

我想知道是否可以在Mysql(InnoDB)中使用FK进行反向查找

原因是——我想从数据库中读取类似XML的结构(每个“层”使用一个表),但能够动态地执行此操作。我希望能够通过添加新表和设置FK约束来更新xml结构

为了澄清,假设我们有一个表“parent”,带有and id(parent_id)和另外两列(k1和k2)。xml看起来像(省略id):


v1
v2
现在,我们添加了一个子表,其中外键引用了parent_id和另一列(ck1)。相同的查询(随后进行一些处理)现在应该给出:

<parent>
 <k1>v1</k1>
 <k2>v2</k2>
 <child>
  <ck1>cv1</ck1>
 </child>
</parent>

v1
v2
cv1
这可能吗?“从父表中选择*并设置某种参数以同时返回带有FK点的子行?”

非常感谢!
/Victor

在阅读了很多之后,一个选择是使用以下内容:

SELECT
  referenced_table_name parent,
  table_name child,
FROM
  information_schema.KEY_COLUMN_USAGE
WHERE
  referenced_table_name IS NOT NULL
这使得所有表都有子表。过滤只将子对象返回到请求的父对象当然很容易。然而,不利的一面是,需要进行上述额外的查询(和处理)


我仍然希望得到一个“更好”的解决方案,但这至少可能是一个开始;)

另外,另一个问题是在执行实际的select查询时。普通的“SELECT*FROM parent_table,child_table”连接两个表,而不考虑FK(您已明确指定“WHERE child_table.FK_constraint_col=parent_table.id”或类似项)。是否可以使select语句考虑FK而不显式指定它们?谢谢
SELECT
  referenced_table_name parent,
  table_name child,
FROM
  information_schema.KEY_COLUMN_USAGE
WHERE
  referenced_table_name IS NOT NULL