2009-06-29 72 views
4

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

原因 - 我想从数据库中读取类似XML的结构(每个“图层”使用一个表格),但是能够动态地执行此操作。我希望能够通过添加一个新表并设置FK约束来更新xml结构。为了澄清,假设我们有一个带有id(parent_id)和两个其他列(k1和k2)的“parent”表。 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”并设置某种参数以返回FK指向的子行?

非常感谢! /维克托

回答

1

读了很多后,一个选择是使用类似:

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

这给有孩子的所有表。过滤只将孩子送回请求的父母当然很容易。然而,不利的是,上述额外的查询(和处理)将是必需的。

我还是很想得到一个“更好”的解决方案,但是这可能至少是一个开始;)

+0

而且 - 执行实际的选择查询时,另一个问题是。正常的“SELECT * FROM parent_table,child_table”加入两个表而不考虑FK(您已明确指定“WHERE child_table.fk_constraint_col = parent_table.id”或相似)。是否有可能使select语句考虑FK而不明确指定它们? 谢谢! – Victor 2009-06-30 07:55:22

相关问题