代码之家  ›  专栏  ›  技术社区  ›  MrTelly

基于查找连接两个不同的表

  •  0
  • MrTelly  · 技术社区  · 14 年前

    我们有大型(2M+行)产品数据表,其中有50多个数据字段和多个特定国家的产品代码。我希望能够有效地从ProductData连接到基于不同代码字段的不同查找表。我们目前使用单独但非常相似的SPs来实现逻辑,这会导致版本更改时出现问题。SPs本身通常是实现复杂逻辑的200-500行,95%的逻辑是通用的,但是大多数连接语句都是针对特定国家的。

    伪SQL中的简化版本如下

    ProductTable Schema
    Id, Data1, Data2, .... , ProductCodeUK, ProductCodeUSA, ProductJapan
    
    SP1_USA
    select Id, Data, Data, LookupUSA.Price As Price from ProductTable 
    join LookupUSA on ProductTable.ProductCodeUSA = LookupUSA.Code
    
    
    SP2_UK
    select Id, Data, Data, LookupUK.Price As Price from ProductTable
    join LookupUK on ProductTable.CodeVersion2 = LookupUK.ProductCodeUK
    

    注意,代码值经常在不同的国家之间重复,因此我们不能很容易地将查找表合并在一起。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Mark Byers    14 年前

    你的问题是你的模式设计得不好。您需要将其规范化:

    ProductCodeUK, ProductCodeUSA, ProductCodeJapan, ProductCodeGermany, ...
    

    应将此数据移动到包含三列的新表中,其中一列是返回到原始表的外键:

    Product CountryCode ProductCode 
    

    查找表应该如下所示:

    CountryCode ProductCode Price ....
    

    有了这个新的设计,你的连接总是一样的。要选择不同的国家,现在只需要修改WHERE子句中的参数。