我正在尝试将数据从旧的数据库设计复制到新的数据库设计。
该数据库用于多租户应用程序,所讨论的源表是一个窗口小部件类别名称表。
每个租户都有自己的私有类别名称,因此旧表格如下所示:
CREATE TABLE OldCategories (
TenantId bigint,
CategoryName nvarchar(255)
)
OldCategories:
TenantId, CategoryName
1, 'Dog Toys'
1, 'Cat Toys'
1, 'Lizard Toys',
2, 'Dog Toys'
2, 'Duck Toys'
新数据库添加了一个中间表,以便必须为中间表中的每一行复制所有租户的类别,这是新模式:
CREATE TABLE NewCategoryGroups (
TenantId bigint,
GroupId bigint IDENTITY,
GroupName nvarchar(255)
)
CREATE TABLE NewCategories (
GroupId bigint,
CategoryName nvarchar(255)
CONSTRAINT PRIMARY KEY ( GroupId, CategoryName )
)
以下是NewCategoryGroups表中的内容:
NewCategoryGroups:
TenantId, GroupId, GroupName
1, 1, '2006 Toys'
1, 2, '2010 Toys'
1, 3, '2016 Toys'
2, 4, '2007 Toys'
2, 5, '2010 Toys'
以下是我想要为NewCategories表获取的示例数据:
NewCategories
GroupId, CategoryName
1, 'Dog Toys' -- Groups 1 through 3 are for Tenant 1
1, 'Cat Toys'
1, 'Lizard Toys',
2, 'Dog Toys'
2, 'Cat Toys'
2, 'Lizard Toys',
3, 'Dog Toys'
3, 'Cat Toys'
3, 'Lizard Toys',
4, 'Dog Toys' -- Groups 4 and 5 are for Tenant 2
4, 'Duck Toys'
5, 'Dog Toys'
5, 'Duck Toys'
我尝试了CROSS JOIN
,如下:
SELECT
CategoryName
FROM
OldCategories
CROSS JOIN NewCategoryGroups
......除了失去了TenantId的区别,所以每个租户都会获得其他所有租户的类别。
答案 0 :(得分:1)
您可能希望使用INNER JOIN
代替
SELECT
g.GroupId,
c.CategoryName
FROM OldCategories c
INNER JOIN NewCategoryGroups g
ON g.TenantId = c.TenantId