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

4
我想知道在Mysql (InnoDB)中是否可以使用外键进行反向查找。
原因是,我希望从数据库中读取类似XML的结构(每个“层”使用一个表),但能够动态地执行此操作。我希望通过添加新表并设置外键约束来更新xml结构。
为了澄清,假设我们有一个名为“parent”的表,其中包含id(parent_id)和另外两列(k1和k2)。XML将如下所示(省略id):
<parent>
 <k1>v1</k1>
 <k2>v2</k2>
</parent>

现在我们添加一个子表格,其中包含一个外键引用parent_id和另一列(ck1)。同样的查询(之后进行一些处理)现在应该给出:
<parent>
 <k1>v1</k1>
 <k2>v2</k2>
 <child>
  <ck1>cv1</ck1>
 </child>
</parent>

这个可能吗?查询“SELECT * FROM parent_table”并设置某种参数以返回指向具有外键的子行?

非常感谢! /Victor

1个回答

1

在阅读了很多资料之后,一个选择是使用类似以下的东西:

SELECT
  referenced_table_name parent,
  table_name child,
FROM
  information_schema.KEY_COLUMN_USAGE
WHERE
  referenced_table_name IS NOT NULL

这将返回所有具有子级的表。当然,过滤以仅返回请求的父级的子级将很容易。然而,缺点是需要上述额外的查询(和处理)。

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


另外,另一个问题是在执行实际的选择查询时。普通的“SELECT * FROM parent_table, child_table”连接两个表而不考虑FK(您必须明确指定“WHERE child_table.fk_constraint_col = parent_table.id”或类似)。是否可能使选择语句考虑FK而无需显式指定它们? - Victor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接