TL; DR - 我正在寻找有关如何更好地编写下面查询的建议。
下面是我的表结构的精简版本,其中包含一些示例数据。我根本无法控制数据结构,因此不幸的是,关于架构更改的建议对我没有帮助。
给定 abuilding_level_key和 afaction_key我需要building_levels从building_culture_variants表中返回从joined到其最接近匹配的记录。
例如,如果我使用goblin_walls&fact_blue我希望goblin_walls加入
building_culture_variant_keyrecord 的记录2。
表的示例结构如下所示:
factions- 是真实表格的压缩版本,因为文化/亚文化记录存储在不同的表格中,但它可以理解这一点。该表仅在查询中真正需要,以便可以引用与给定faction_key.
building_levels- 作为系统中每个建筑物的基本记录。每个建筑物只有一个记录。
building_culture_variants- 顾名思义;可以有用于每个多个记录building_level_key并且每个变体记录是使用针对建筑物水平匹配building_level_key和的组合faction_key,culture_key和subculture_key。
匹配从building_level_key在文化变体表中查找给定开始。这是一场艰难的比赛,需要加入任何两个建筑等级和文化变体。
每个建筑级别记录将至少有一个文化变体。通常每个建筑级别有多个文化变体,但平均不超过 4 个。最常见的文化变体是“通用”变体,这意味着faction_key、culture_key和subculture_key列都为空,因此该建筑将与任何派系匹配。但是,派系列的任何组合都可以有一个键,因此我需要将给定的派系与文化变体中的每个派系列进行匹配。
附注:文化变异键始终保持一致,这意味着我永远不会有这样一个场景,一个faction_key和subculture_key在文化变异表不匹配对应faction_key,并subculture_key从派系表(与亚表,它已经为清晰起见,省略) .
我提供了一个sql fiddle来使用,并在下面包含了我的查询版本:
SELECT …Run Code Online (Sandbox Code Playgroud)