标题可能不是最准确的标题,但我有以下图表:
请注意, CultureTranslations 表包含来自其他3个PK
和FK
列( ResourceKey )的合并NVARCHAR(256)
CultureTranslations 表包含类似于以下内容的数据:
ApplicationId | CultureCodeId | ResourceGroupId | ResourceKey | ResourceValue |
-------------------------------------------------------------------------------
1 | 1 | 1 | X | X (US)
1 | 1 | 1 | Y | Y (US)
1 | 1 | 1 | Z | Z (US)
....
1 | 2 | 1 | X | X (GB)
1 | 2 | 1 | Z | Z (GB)
and so on...
其中 CultureCodeId 1 = en-US
,2 = en-GB
。
问题是,文化en-GB
可能没有所有等效en-US
记录的记录,仅适用于某些记录。
如何根据上述内容编写查询或视图,以便将同一行/记录中不同文化的资源组合在一起? E.g:
s.ApplicationId | s.ResourceGroupId | s.ResourceKey | s.ResourceValue | d.ResouceValue |
----------------------------------------------------------------------------------------
1 | 1 | X | X (US) | X (GB)
1 | 1 | Y | Y (US) | null
1 | 1 | Z | Z (US) | Z (GB)
其中s =源文化(en-US
),d =目标文化(en-GB
)。
它应始终显示来自源的所有 ResourceKey ,但将null
放在d.ResourceValue
列中,其中未找到该特定 ResourceKey的资源, ApplicationId &的 ResourceGroupId
答案 0 :(得分:1)
使用left join
并将where
条款的一部分放在join specification
中,可以获得您想要的结果。
测试设置:http://rextester.com/UXUZXH20794
create table CultureTranslation (
ApplicationId int not null
, CultureCodeId int not null
, ResourceGroupId int not null
, ResourceKey nvarchar(256)
, ResourceValue nvarchar(256)
);
insert into CultureTranslation values
(1,1,1,'X','X,(US)')
,(1,1,1,'Y','Y,(US)')
,(1,1,1,'Z','Z,(US)')
,(1,2,1,'X','X,(GB)')
,(1,2,1,'Z','Z,(GB)');
查询:
select
s.ApplicationId
, s.ResourceGroupId
, s.ResourceKey
, s.ResourceValue
, d.ResourceValue
from
CultureTranslation s
left join CultureTranslation d
on s.ApplicationId = d.ApplicationId
and s.ResourceGroupId = d.ResourceGroupId
and s.ResourceKey = d.ResourceKey
and d.CultureCodeId = 2
where s.CultureCodeId = 1
结果:
+---------------+-----------------+-------------+---------------+---------------+
| ApplicationId | ResourceGroupId | ResourceKey | ResourceValue | ResourceValue |
+---------------+-----------------+-------------+---------------+---------------+
| 1 | 1 | X | X,(US) | X,(GB) |
| 1 | 1 | Y | Y,(US) | NULL |
| 1 | 1 | Z | Z,(US) | Z,(GB) |
+---------------+-----------------+-------------+---------------+---------------+
答案 1 :(得分:0)
从CultureCode A中选择A. ,B。 内部加入CultureCode B A.ResourceKey = B.ResourceKey 其中A.CultureCodeId = B.CultureCodeId