1

我有一个具有实体属性值结构的表。例如,作为实体,我可以有不同的国家。我可以有以下属性:“位于”、“有边界”、“首都”。

然后我想找到所有“位于亚洲”和“与俄罗斯接壤”的国家。执行此操作的直接方法是使用实​​体将表与自身连接起来,即用于连接的列,然后使用where.

但是,如果我在实体列中有 20 行俄罗斯在,那么在联合表中我将有 20*20=400 行,俄罗斯作为实体。每个国家都是如此。所以,联合表将是巨大的。

使用原始表提取所有位于亚洲的国家,然后提取所有与俄罗斯接壤的国家,然后使用这两组国家中的那些元素,会不会更有效?

4

2 回答 2

1

您将 join 与笛卡尔积混淆了。连接中的行数永远不会比实际数据中的行数多,唯一要改变的是采用了哪些元素/行。

因此,如果您有 20 个俄语行,则连接生成的表永远不会有超过 20 个俄语条目。

您建议使用的操作正是 join 所做的。只要确保你有合适的索引,剩下的就让 MySQL 来做。

于 2010-11-13T11:13:10.050 回答
1

您最终不应该拥有大量记录,因此这应该可以

SELECT  a.entity,
    a.located_in,
    a.border
FROM    my_table a
WHERE   a.border in (SELECT b.entity FROM my_table b WHERE b.entity = 'RUSSIA' )
AND     a.located_in = 'ASIA'
于 2010-11-13T11:16:28.000 回答