基于查找加入两个不同的表

时间:2010-11-13 22:18:39

标签: tsql lookup

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

Pseudo 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 个答案:

答案 0 :(得分:3)

您的问题是您的架构设计糟糕。你需要规范化这个:

ProductCodeUK, ProductCodeUSA, ProductCodeJapan, ProductCodeGermany, ...

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

Product CountryCode ProductCode 

您的查找表应如下所示:

CountryCode ProductCode Price ....

使用这种新设计,您的连接始终是相同的。要选择不同的国家/地区,您现在只需要修改WHERE子句中的参数。