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